前言:從事ios開發一年多以來,一直使用svn管理源**。對svn的特點和弊端已經深有體會。前些天雙十二前後,專案工期緊張到爆,起早貪黑的加班,可謂披星戴月,這還不止,回到家中還要瘋狂的敲**。那麼問題來了,公司svn伺服器是內網伺服器,在家裡無法訪問,提交/更新**就成了問題。跟技術總監(筆者公司為初創型小公司,直接和技術總監對話)溝通後,技術總監同意了把svn伺服器改為外網伺服器。但是,這並不是好的解決辦法,畢竟svn伺服器掛到外網上,從安全性上總是說不過去。於是乎,git成了我心中取代svn的上上策。昨天上班開會就跟cto提出使用git管理**的建議,他也愉快的答應了。
git是一款開源的分布式版本管理工具,git的誕生也是相當傳奇的,由linux之父-linus benedict torvalds開發而來,當初linus benedict torvalds僅僅是為了輔助linux核心的開發才一併開發了這個至今為止世界上最快的、最簡單的版本管理工具。關於這個傳奇的故事,筆者就不在此贅述。
目前,git雖然很流行,但也僅僅是在國外。在國內,多數公司還在使用svn進行版本控制,不過不用擔心,據筆者所知,已經有很多大公司(像bat這樣的網際網路公司)開始由svn轉向git。並且,越來越多的開源專案已經轉移到git,很多開源**上的**就是git來管理的,所以git取代svn是大勢所趨的。
前面已經說過,git是一款開源的分布式版本管理工具。相對於分布式,還有一種集中式,集中式版本管理工具的傑出代表就是svn。關於svn的詳細介紹,讀者可以檢視筆者之前寫過的幾篇文章:
如下兩張圖,可以概括分布式和集中式管理工具的架構,圖(1)為分布式版本管理工具架構,圖(2)為集中式管理工具架構。
圖(1)
圖(2)
這裡筆者想象出來乙個比較容易理解的例子,可以概括出分布式和集中式的區別:像bat這樣的大公司,員工層級架構比較複雜,每個技術部門都設有技術負責人(cto),而每個部門內部又根據分工設有技術經理、主管、組長等等,一般情況下,員工只需要向自己的直屬上級匯報工作即可,這樣工作起來,效率比較高。而像筆者這樣的初創型小公司,部門內部角色就沒有那麼複雜了,技術部門每個員工都可以向cto直接反應問題,cto要處理來自n個技術人員反應的問題,效率比較低。bat這樣的大公司的員工各層級架構就像是分布式一樣,而後者就像是集中式一樣。
從圖(2)可以看出,集中式管理系統的**統一的由一台伺服器集中管理。其他系統如果想得到**,必須從這一台伺服器上拷貝。同樣,其他系統想要提交**,也只能向這台伺服器提交。這台伺服器起到了乙個集中管理所有**的作用,當然如果svn伺服器出現故障,那麼後果不開設想。
從圖(1)可以看出,分布式管理系統的**可以由自己本地伺服器來管理。因為每個系統本地都有乙個本地**倉庫(相當於遠端**倉庫在本地的備份),本地系統可以先把**提交到本地**倉庫,然後再由本地**倉庫提交到共享版本庫(在這裡,共享版本庫相當於集中式管理系統的遠端**倉庫)這樣在本地系統和共享版本庫之間新增了一層本地**倉庫,開發人員直接和本地**倉庫打交道,減輕了對共享版本庫的壓力,並且也降低了開發人員因為誤操作而導致對遠端**倉庫的汙染。
正是因為二者的這個差別,通過分布式,我們可以在沒有網路的情況下,先把**提交到本地**倉庫,速度之快不言而喻,待到有網路時再提交到共享版本庫。而如果通過集中式,我們不能夠在沒有網路的情況下把**提交到遠端**倉庫,即便是有網路,頻繁的傳輸對svn的壓力比較大,並且每次傳輸都要受限於網路速度。
git的工作原理還是比較簡單的,當我們建立了本地**倉庫後,會在本地**倉庫的根目錄中生成乙個.git的隱藏檔案。.git為乙個檔案目錄,又叫做版本庫。在本地**倉庫資料夾中,除.git目錄之外的所有與.git同級的目錄及其子目錄都叫做工作區。
工作區(working directory):倉庫資料夾裡除.git目錄以外的內容版本庫(repository):.git目錄,用於儲存記錄版本資訊
暫緩區(stage)
分支(master):git自動建立的第乙個分支
head指標:用於指向當前分支
git add和git commit的原理下面一幅神圖就可以解釋git add 和 git commit的原理:git add :把檔案修改或者新新增的檔案新增到暫存區
git commit :把暫存區的所有內容提交到當前分支
我們修改或者新新增的檔案起初是處於工作區,通過git add命令可以把工作區的檔案移動到版本庫中的暫緩區(stage)。
處在暫緩區(stage)的**可以通過git commit -m 「提交的注釋」 提交到版本庫中的分支(master)。
處在分支(master)中的**可以通過git push命令push到共享版本庫。
注意:只有分支中的檔案才可以push到共享版本庫。
1.初始化乙個**倉庫真實的git伺服器的搭建是非常繁瑣且複雜的,並且git伺服器只能搭建在linux系統上。筆者對git伺服器的搭建不做介紹,日後有時間再加以補充。在此僅對共享版本庫的搭建進行詳細介紹。git init
2.如果使用git必須給git配置乙個使用者名稱和郵箱
給當前的git倉庫配置乙個使用者名稱和郵箱
git config user.name 「ws」
git config user.email 「[email protected]」
配置乙個全域性的使用者名稱和郵箱
git config --global user.name 「ws」
git config --global user.email 「[email protected]」
3.初始化專案
touch main.m : 建立了main.m
git add main.m : 將新新增的檔案或者修改的檔案新增到暫存區
git commit -m 「初始化專案」
git add . : 將所有沒有被新增到暫存區或者**倉庫的檔案新增到暫存區
注意:無論是新新增的檔案或者修改的檔案,都需要先通過add命令新增到暫存區中,之後再通過commit命令新增到本地倉庫中
4.檢視檔案的狀態 git status
紅色 : 新建立的檔案或者被修改的檔案,沒有被新增到暫存區
綠色 : 表示檔案在暫存區,但是沒有被新增到本地倉庫中
5.給命令起別名
git config alias.st 「status」
git config alias.ci 「commit -m」
git config --global alias.st 「status」
6.git刪除檔案
git rm 檔名
7.檢視版本號
git log
git reflog
git config --global alias.lg "log --color --graph --pretty=format:'%cred%h%creset -%c(yellow)%d%creset %s %cgreen(%cr) %c(bold blue)<%an>%creset' --abbrev-commit」
git lg
8.git的版本號是由sha1演算法生成40位的雜湊值
9.版本回退
git reset --hard head : 回退到當前的版本
git reset --hard head^ : 回退到上乙個版本
git reset --hard head^^ : 回退到上上個版本
git reset --hard head~100 : 回退到前100版本
git reset --hard 版本號(前5位)
1.建立共享版本庫資料夾,然後終端進入該資料夾下執行以下命令建立乙個空的共享版本庫git init --bare
git clone 位址
3.新增需要忽略的檔案
touch .gitignore
git add .gitignore
git commit -m 「新增了需要忽略的檔案」
4.專案經理初始化專案
git commit -m 「初始化專案」—>提交到本地**倉庫
5.將專案push遠端倉庫中
git push origin
6.當源**管理是使用git,並且在xcode進行多人開發的操作
注意:當使用git,專案中用到了靜態庫就不需要通過命令列進行新增
1.1.0版本開發完成,之後對1.0版本進行備份git tag -a weibo1.0 -m 「這個是1.0版本」 : 給某乙個版本打上標籤(weibo1.0是標籤名稱)
git tag : 檢視所有的標籤
2.需要將1.0版本的標籤,push到伺服器
git push origin weibo1.0
3.繼續開發2.0版本
4.發現1.0版本有bug,從標籤裡面clone 1.0版本,從標籤建立乙個fixbug分支,在分支中修復bug
git clone 共享版本庫
git checkout weibo1.0(標籤的名稱)
git checkout -b weibo1.1fixbug(分支名稱)
git tag -a weibo1.1 -m 「這個是修復了1.0版本bug的1.1版本」
git tag
git push origin weibo1.1
將子分支中**合併到主分支,pull—>weibo1.1fixbug—>push master—>其它同事更新
6.刪除分支
git branch -r(r是遠端倉庫的意思,這個命令可以檢視遠端倉庫中的分支)
git branch -r -d 分支名稱
git介紹和使用
開啟git bash git config global user.name git config global user.email git有乙個系統級的配置檔案 git config system l 或者 git config l 檔案在 安裝git的目錄下的etc gitconfig中 gi...
Git(一)基本介紹和安裝
git 定義 分布式版本控制系統 提下github,是基於git的 託管 同樣對專案進行版本控制,注意私有庫需要付費 跟svn cvs比較 相同點 版本控制軟體 不同點 svn是集中式的版本控制,版本庫放在 伺服器 通常操作使用聯網來比對內容 git是分布式的版本控制,各自電腦會存放完整版本 只推送...
miniconda的介紹和基本使用
conda 是一種通用包管理系統,旨在構建和管理任何語言和任何型別的軟體。舉個例子 包管理與pip的使用類似,環境管理則允許使用者方便地安裝不同版本的python並可以快速切換。anaconda 則是乙個打包的集合,裡面預裝好了conda 某個版本的python 眾多packages 科學計算工具等...