Git是目前世界上最先進的分布式版本控制系統。相對于分布式版本控制系統,也有集中式版本控制系統,比如TFS。
集中式版本控制系統,版本庫是集中存放在中央服務器的,而干活的時候,用的都是自己的電腦,所以要先從中央服務器取得最新的版本,然后開始干活,干完活了,再把自己的活推送給中央服務器。中央服務器就好比是一個圖書館,你要改一本書,必須先從圖書館借出來,然后回到家自己改,改完了,再放回圖書館。
集中式版本控制系統最大的問題是必須聯網才能工作,而且,如果中央服務器出問題,所有人沒法工作了。
而分布式版本控制系統就不存在這樣的問題,因為每個人的電腦中都有一個完整的版本庫,在同步之前,所有操作都可以在本地倉庫中完成。
集中式版本控制系統:
分布式版本控制系統:
分布式版本控制系統的本地操作流程圖:
工作目錄,暫存區域和本地倉庫這幾個概念非常重要。
工作目錄:即解決方案所在目錄。
暫存區域:已添加,但還未提交到本地倉庫。
本地倉庫:已提交,相對于遠端倉庫而言的本地版本。
基于已存在的項目,將它添加到遠端倉庫(GitLab)中。
比如,現在我要將本地項目HelloWebAPI添加到GitLab中,要進行以下操作。
1,解決方案上右鍵,選擇將解決方案添加到源代碼管理菜單,打開選擇源代碼管理窗口。或者打開菜單"文件/添加到源代碼管理"也可以打開選擇源代碼管理窗口,如下圖
2,選擇Git,確定,在打開的更改窗口中,寫上備注點擊提交,此時項目已添加到本地倉庫中了,但還沒有發布到遠端倉庫。
3,在發布到遠端倉庫之前,必須在GitLab上先建立一個遠端倉庫。
點擊Create PRoject按鈕,即創建了一個遠端倉庫。
創建遠端倉庫時的可見性要說明一下:
Private:是需要顯式授權(加入到項目成員中)才可以clone項目。
Internal:只要擁有GitLab帳號(或者域帳號)的開發人員默認都可以clone項目。
Public:不需要任何授權就可以clone項目。
綜合以上,我們在創建遠端倉庫的時候,最好將可見性設為Internal,其它項目成員都可以clone項目,免去了一個一個添加的麻煩。
復制地址,下面會用到。
4,發布到遠端倉庫。
點擊發布按鈕,可以看到已經發布成功了。
此時進到GitLab項目的主頁刷新頁面,可以看到提交的記錄,如下圖。
添加到遠端倉庫是基于本地已存在項目,而從遠端倉庫克隆是項目在本地不存在,需要從遠端倉庫克隆一份到本地的情形,操作步驟如下。
1,Git全局設置,可以設置用戶名,email和存儲庫位置。用戶名和email會顯示在你的提交記錄中,存儲庫位置便于統一遠端倉庫克隆時的路徑,如下圖。
2,復制你要克隆的遠端倉庫的url,如下圖。
3,進入團隊資源管理器的連接窗口,在本地Git存儲庫項中粘貼上前面copy的url,然后點擊克隆按鈕,這樣就成功創建了一個本地存儲庫,如下圖。
可以雙擊打開項目。
遠端倉庫克隆到本地后,我們就可以在本地開發,并提交更改了。
1,簽出代碼并修改
我在readme文件中添加了一句話
2,提交
在解決方案上右鍵,選擇提交,進入團隊資源管理器的更改窗口。
輸入注釋,然后點擊提交按鈕,即可提交代碼,需要注意的是,此時只是提交到本地存儲庫中,還不是遠端存儲庫。
提交按鈕有個下拉菜單,這個后面會講到,先點擊提交(第1個)即可。
3,同步
要將本地的更改發布到遠端存儲庫,我們還需要做同步操作,如下圖。
我們先不管獲取,拉取和推送這些,后面會講。
提示提交成功
查看遠端存儲庫,已經可以看到同步成功了。
進入到團隊資源管理器的同步窗口,如下圖。
先來了解下這幾個按鈕的作用。
推送:將本地存儲庫的更改更新到遠端存儲庫。
獲取:在拉取之前獲取所有傳入提交。
拉取:從遠端存儲庫獲取最新版本。
同步:同步實際上同時進行了兩個操作,先從遠端存儲庫拉取(pull)最新版本,然后和本地存儲庫進行比較,進行自動合并(merge)后推送(push)到遠端存儲庫。
1,獲取最新版本
為了減少沖突,在開始開發新功能前,都會先去獲取最新版本,獲取的方式一般有兩種,當然要依實際情況來選擇。
1) 獲取和拉取,在傳入提交項可以看到團隊其它成員的提交更改,可以拉取全部,或者拉取其中某個更改到本地。
2) 同步,因為同步會同時進行兩個操作,拉取和推送。所以這個操作適合本地存儲庫沒有待推送的更改的情形,因為如果本地存在待推送的更改的時候,很容易導致沖突的發生。
2,提交更改
當開發完某個功能,或者fix了某個bug時,就會去提交更改到遠端存儲庫。
1) 推送,可以一次推送全部本地更改或提交一個,推送一個。
2) 同步,也可以點擊同步實現提交更改,當然,在同步之前最好拉取最新版本,這樣可以減少沖突的發生。
1,入口
有兩種添加成員的方式,Add members是從人員清單中添加,Import members是從其它項目中批量導入成員。
2,GitLab默認提供了四種角色,如果要允許成員提交更改的話,必須設定其角色為Master,否則會收到如下圖的錯誤。
注:以上錯誤,只是針對主線master,在分支上提交更改不會報告這個錯誤。
1,創建分支
有兩種方法創建分支,分別是基于本地創建分支和基于遠端創建分支,如果是基于本地創建分支,最好先獲取最新版本,如果是基于遠端創建分支,團隊成員最好都提交本地更改。我們約定,一般都基于遠端創建分支。
需要注意的是,如果是基于遠端創建分支,一定要取消跟蹤遠程分支復選框,否則就創建成了跟蹤分支了。跟蹤分支不能分布,它是用于聯系本地分支和遠程分支的,在跟蹤分支上的操作(包括推送和拉取)會自動推送和拉取到關聯的遠程分支上,比如默認的本地master分支就是origin/master的一個跟蹤分支。
輸入分支名稱,點擊創建分支。
創建成功,接著發布分支,即將分支推送到遠端存儲庫。
要注意的是,此時該分支變為跟蹤分支了。
分支2015.07.29.HelloWebAPI1.0已經推送到遠端存儲庫了。
2,合并分支
為了模擬實際情形,先在分支2015.07.29.HelloWebAPI1.0上做些修改,然后提交更改,最后將分支合并到主線上。
在test2.txt中添加一行新的記錄,并提交更改到本地存儲庫
切換到分支窗口,先切換到主線(master)分支,然后點擊合并按鈕,從分支合并選擇源分支2015.07.29.HelloWebAPI1.0,當前分支選擇目標分支master,然后點擊合并按鈕開始合并。
合并,提交更改成功提示
分支更新的代碼已經合并過來了。
推送更改到遠端存儲庫
進入GitLab,已經可以看到提交更改記錄,并且主線代碼已經更新了。
主線代碼已經更新
3,刪除分支
首先從遠端刪除分支
此時本地對應的分支就由跟蹤分支為普通分支了,直接刪除即可。
這樣,分支2015.08.27就被完整刪除了。
當團隊中兩人或多個同時修改同一文件的同一代碼段,后提交更改或獲取更新的人就會碰到沖突。
1,沖突發生
以主線(master)的文件test1.txt為例,假如兩人同時修改它。
張三在test1.txt的第3和4行新增兩行代碼,并提交到本地存儲庫。
李四也在test1.txt的第3和第4行新增兩行代碼,并提交更改和推送到遠端存儲庫。
如果張三再去推送的話, 沖突就發生了。
2,解決沖突
先獲取并拉取最新,然后解決沖突。
獲取并拉取最新版本
點擊解決沖突鏈接,進入到解決沖突窗口
點擊合并按鈕
源和目標的更改都勾選上,并且點擊接受合并
提交合并
GitLab已更新
1,使用TortoiseGit等工具手動推送。
2,使用其它工具,可以參考下面文章。
1),http://www.companysz.com/sorex/archive/2013/03/11/2954095.html
2),http://chriskirby.net/migrate-an-existing-project-from-tfs-to-github-with-changeset-history-intact/
3,TFS—>git可以保留完整歷史記錄(包括源代碼),方法:
https://github.com/git-tfs/git-tfs
系統變量的path里加上:
;C:/Program Files (x86)/Git/bin;F:/Users/Desktop/GitTfs-0.22.0/
新開cmd,執行命令
md C:/PackageFH
cd C:/PackageFH
git-tfs clone http://hp580tfssz:8080/tfs/WingonTravel $/PackageFH/MainLine
安裝程序可以從以下路徑獲得:
//172.18.21.12/技術開發部/轉運站/Software/git/TortoiseGit-1.8.14.0_64bit.1436148947.msi
主要有以下幾個步驟
1,創建本地倉庫
點擊OK,即創建本地倉庫成功。
2,設置
設置用戶信息和遠端倉庫url
點擊確定,設置完成。
3,提交到本地倉庫
點擊OK,代碼就提交到本地倉庫了。
4,推送到遠端倉庫
推送成功
查看GitLab,代碼已經同步過去了。
|
新聞熱點
疑難解答