Git是目前世界上最先進(jìn)的分布式版本控制系統(tǒng)。相對(duì)于分布式版本控制系統(tǒng),也有集中式版本控制系統(tǒng),比如TFS。
集中式版本控制系統(tǒng),版本庫是集中存放在中央服務(wù)器的,而干活的時(shí)候,用的都是自己的電腦,所以要先從中央服務(wù)器取得最新的版本,然后開始干活,干完活了,再把自己的活推送給中央服務(wù)器。中央服務(wù)器就好比是一個(gè)圖書館,你要改一本書,必須先從圖書館借出來,然后回到家自己改,改完了,再放回圖書館。
集中式版本控制系統(tǒng)最大的問題是必須聯(lián)網(wǎng)才能工作,而且,如果中央服務(wù)器出問題,所有人沒法工作了。
而分布式版本控制系統(tǒng)就不存在這樣的問題,因?yàn)槊總€(gè)人的電腦中都有一個(gè)完整的版本庫,在同步之前,所有操作都可以在本地倉庫中完成。
集中式版本控制系統(tǒng):
![clipboard[122] clipboard[122]](http://s1.VeVb.com/20151016/juqgzzozgmi54.png)
分布式版本控制系統(tǒng):
![clipboard[123] clipboard[123]](http://s1.VeVb.com/20151016/rw1uc1ptrvu55.png)
分布式版本控制系統(tǒng)的本地操作流程圖:
![clipboard[124] clipboard[124]](http://s1.VeVb.com/20151016/3qycrjad23055.png)
工作目錄,暫存區(qū)域和本地倉庫這幾個(gè)概念非常重要。
工作目錄:即解決方案所在目錄。
暫存區(qū)域:已添加,但還未提交到本地倉庫。
本地倉庫:已提交,相對(duì)于遠(yuǎn)端倉庫而言的本地版本。
基于已存在的項(xiàng)目,將它添加到遠(yuǎn)端倉庫(GitLab)中。
比如,現(xiàn)在我要將本地項(xiàng)目HelloWebAPI添加到GitLab中,要進(jìn)行以下操作。
1,解決方案上右鍵,選擇將解決方案添加到源代碼管理菜單,打開選擇源代碼管理窗口。或者打開菜單"文件/添加到源代碼管理"也可以打開選擇源代碼管理窗口,如下圖
![clipboard[125] clipboard[125]](http://s1.VeVb.com/20151016/i4a02qempcw55.png)
![clipboard[126] clipboard[126]](http://s1.VeVb.com/20151016/tka4w1mnv4p55.png)
2,選擇Git,確定,在打開的更改窗口中,寫上備注點(diǎn)擊提交,此時(shí)項(xiàng)目已添加到本地倉庫中了,但還沒有發(fā)布到遠(yuǎn)端倉庫。
![clipboard[127] clipboard[127]](http://s1.VeVb.com/20151016/csbifspj1gy55.png)
![clipboard[128] clipboard[128]](http://s1.VeVb.com/20151016/op34ifbsi3z55.png)
![clipboard[129] clipboard[129]](http://s1.VeVb.com/20151016/t0ljaglabpu56.png)
3,在發(fā)布到遠(yuǎn)端倉庫之前,必須在GitLab上先建立一個(gè)遠(yuǎn)端倉庫。
![clipboard[130] clipboard[130]](http://s1.VeVb.com/20151016/pmnw35xtrun56.png)
點(diǎn)擊Create PRoject按鈕,即創(chuàng)建了一個(gè)遠(yuǎn)端倉庫。
![clipboard[131] clipboard[131]](http://s1.VeVb.com/20151016/u0ytx15rzcv56.png)
創(chuàng)建遠(yuǎn)端倉庫時(shí)的可見性要說明一下:
Private:是需要顯式授權(quán)(加入到項(xiàng)目成員中)才可以clone項(xiàng)目。
Internal:只要擁有GitLab帳號(hào)(或者域帳號(hào))的開發(fā)人員默認(rèn)都可以clone項(xiàng)目。
Public:不需要任何授權(quán)就可以clone項(xiàng)目。
綜合以上,我們?cè)趧?chuàng)建遠(yuǎn)端倉庫的時(shí)候,最好將可見性設(shè)為Internal,其它項(xiàng)目成員都可以clone項(xiàng)目,免去了一個(gè)一個(gè)添加的麻煩。
復(fù)制地址,下面會(huì)用到。
![clipboard[132] clipboard[132]](http://s1.VeVb.com/20151016/1a31gjwvw1y56.png)
4,發(fā)布到遠(yuǎn)端倉庫。
![clipboard[133] clipboard[133]](http://s1.VeVb.com/20151016/esmtmfauls356.png)
點(diǎn)擊發(fā)布按鈕,可以看到已經(jīng)發(fā)布成功了。
![clipboard[134] clipboard[134]](http://s1.VeVb.com/20151016/socii2rsn2f56.png)
此時(shí)進(jìn)到GitLab項(xiàng)目的主頁刷新頁面,可以看到提交的記錄,如下圖。
![clipboard[135] clipboard[135]](http://s1.VeVb.com/20151016/q031jcwfz2257.png)
添加到遠(yuǎn)端倉庫是基于本地已存在項(xiàng)目,而從遠(yuǎn)端倉庫克隆是項(xiàng)目在本地不存在,需要從遠(yuǎn)端倉庫克隆一份到本地的情形,操作步驟如下。
1,Git全局設(shè)置,可以設(shè)置用戶名,email和存儲(chǔ)庫位置。用戶名和email會(huì)顯示在你的提交記錄中,存儲(chǔ)庫位置便于統(tǒng)一遠(yuǎn)端倉庫克隆時(shí)的路徑,如下圖。
![clipboard[136] clipboard[136]](http://s1.VeVb.com/20151016/nkbi0e0khxw57.png)
2,復(fù)制你要克隆的遠(yuǎn)端倉庫的url,如下圖。
![clipboard[137] clipboard[137]](http://s1.VeVb.com/20151016/djosbcccpcc57.png)
3,進(jìn)入團(tuán)隊(duì)資源管理器的連接窗口,在本地Git存儲(chǔ)庫項(xiàng)中粘貼上前面copy的url,然后點(diǎn)擊克隆按鈕,這樣就成功創(chuàng)建了一個(gè)本地存儲(chǔ)庫,如下圖。
![clipboard[138] clipboard[138]](http://s1.VeVb.com/20151016/rbzsc44fwtj57.png)
![clipboard[139] clipboard[139]](http://s1.VeVb.com/20151016/nru3nwayswx59.png)
可以雙擊打開項(xiàng)目。
遠(yuǎn)端倉庫克隆到本地后,我們就可以在本地開發(fā),并提交更改了。
1,簽出代碼并修改
我在readme文件中添加了一句話
![clipboard[140] clipboard[140]](http://s1.VeVb.com/20151016/3yaenrh5rgi59.png)
2,提交
在解決方案上右鍵,選擇提交,進(jìn)入團(tuán)隊(duì)資源管理器的更改窗口。
![clipboard[141] clipboard[141]](http://s1.VeVb.com/20151016/d4zawoglgxs59.png)
輸入注釋,然后點(diǎn)擊提交按鈕,即可提交代碼,需要注意的是,此時(shí)只是提交到本地存儲(chǔ)庫中,還不是遠(yuǎn)端存儲(chǔ)庫。
![clipboard[142] clipboard[142]](http://s1.VeVb.com/20151016/mxkr0pskjlu59.png)
提交按鈕有個(gè)下拉菜單,這個(gè)后面會(huì)講到,先點(diǎn)擊提交(第1個(gè))即可。
![clipboard[143] clipboard[143]](http://s1.VeVb.com/20151016/rim5dmavsum00.png)
![clipboard[144] clipboard[144]](http://s1.VeVb.com/20151016/vcsxgedaxqr00.png)
3,同步
要將本地的更改發(fā)布到遠(yuǎn)端存儲(chǔ)庫,我們還需要做同步操作,如下圖。
我們先不管獲取,拉取和推送這些,后面會(huì)講。
![clipboard[145] clipboard[145]](http://s1.VeVb.com/20151016/bpdtzqfk41300.png)
提示提交成功
![clipboard[146] clipboard[146]](http://s1.VeVb.com/20151016/sthicxvbkgw01.png)
查看遠(yuǎn)端存儲(chǔ)庫,已經(jīng)可以看到同步成功了。
![clipboard[147] clipboard[147]](http://s1.VeVb.com/20151016/hddndnct54c01.png)
進(jìn)入到團(tuán)隊(duì)資源管理器的同步窗口,如下圖。
![clipboard[148] clipboard[148]](http://s1.VeVb.com/20151016/xsytwrbwae301.png)
先來了解下這幾個(gè)按鈕的作用。
推送:將本地存儲(chǔ)庫的更改更新到遠(yuǎn)端存儲(chǔ)庫。
獲取:在拉取之前獲取所有傳入提交。
拉取:從遠(yuǎn)端存儲(chǔ)庫獲取最新版本。
同步:同步實(shí)際上同時(shí)進(jìn)行了兩個(gè)操作,先從遠(yuǎn)端存儲(chǔ)庫拉取(pull)最新版本,然后和本地存儲(chǔ)庫進(jìn)行比較,進(jìn)行自動(dòng)合并(merge)后推送(push)到遠(yuǎn)端存儲(chǔ)庫。
1,獲取最新版本
為了減少?zèng)_突,在開始開發(fā)新功能前,都會(huì)先去獲取最新版本,獲取的方式一般有兩種,當(dāng)然要依實(shí)際情況來選擇。
1) 獲取和拉取,在傳入提交項(xiàng)可以看到團(tuán)隊(duì)其它成員的提交更改,可以拉取全部,或者拉取其中某個(gè)更改到本地。
![clipboard[149] clipboard[149]](http://s1.VeVb.com/20151016/3ih2nuck3d201.png)
2) 同步,因?yàn)橥綍?huì)同時(shí)進(jìn)行兩個(gè)操作,拉取和推送。所以這個(gè)操作適合本地存儲(chǔ)庫沒有待推送的更改的情形,因?yàn)槿绻镜卮嬖诖扑偷母牡臅r(shí)候,很容易導(dǎo)致沖突的發(fā)生。
![clipboard[150] clipboard[150]](http://s1.VeVb.com/20151016/uji0wwluhj101.png)
2,提交更改
當(dāng)開發(fā)完某個(gè)功能,或者fix了某個(gè)bug時(shí),就會(huì)去提交更改到遠(yuǎn)端存儲(chǔ)庫。
1) 推送,可以一次推送全部本地更改或提交一個(gè),推送一個(gè)。
![clipboard[151] clipboard[151]](http://s1.VeVb.com/20151016/nkvj0rfuluf02.png)
2) 同步,也可以點(diǎn)擊同步實(shí)現(xiàn)提交更改,當(dāng)然,在同步之前最好拉取最新版本,這樣可以減少?zèng)_突的發(fā)生。
![clipboard[152] clipboard[152]](http://s1.VeVb.com/20151016/k4wrdfw4rdo02.png)
1,入口
![clipboard[153] clipboard[153]](http://s1.VeVb.com/20151016/kcjj4sgz3vn03.png)
![clipboard[154] clipboard[154]](http://s1.VeVb.com/20151016/uaaf4kiwrlf03.png)
有兩種添加成員的方式,Add members是從人員清單中添加,Import members是從其它項(xiàng)目中批量導(dǎo)入成員。
![clipboard[155] clipboard[155]](http://s1.VeVb.com/20151016/bywero3w2kd04.png)
2,GitLab默認(rèn)提供了四種角色,如果要允許成員提交更改的話,必須設(shè)定其角色為Master,否則會(huì)收到如下圖的錯(cuò)誤。
![clipboard[156] clipboard[156]](http://s1.VeVb.com/20151016/apbkoixgawc04.png)
![]()
注:以上錯(cuò)誤,只是針對(duì)主線master,在分支上提交更改不會(huì)報(bào)告這個(gè)錯(cuò)誤。
1,創(chuàng)建分支
有兩種方法創(chuàng)建分支,分別是基于本地創(chuàng)建分支和基于遠(yuǎn)端創(chuàng)建分支,如果是基于本地創(chuàng)建分支,最好先獲取最新版本,如果是基于遠(yuǎn)端創(chuàng)建分支,團(tuán)隊(duì)成員最好都提交本地更改。我們約定,一般都基于遠(yuǎn)端創(chuàng)建分支。
需要注意的是,如果是基于遠(yuǎn)端創(chuàng)建分支,一定要取消跟蹤遠(yuǎn)程分支復(fù)選框,否則就創(chuàng)建成了跟蹤分支了。跟蹤分支不能分布,它是用于聯(lián)系本地分支和遠(yuǎn)程分支的,在跟蹤分支上的操作(包括推送和拉取)會(huì)自動(dòng)推送和拉取到關(guān)聯(lián)的遠(yuǎn)程分支上,比如默認(rèn)的本地master分支就是origin/master的一個(gè)跟蹤分支。

![clipboard[158] clipboard[158]](http://s1.VeVb.com/20151016/sodjrql322p05.png)
輸入分支名稱,點(diǎn)擊創(chuàng)建分支。
![clipboard[159] clipboard[159]](http://s1.VeVb.com/20151016/rkb4u1w4dkq05.png)
創(chuàng)建成功,接著發(fā)布分支,即將分支推送到遠(yuǎn)端存儲(chǔ)庫。
![clipboard[160] clipboard[160]](http://s1.VeVb.com/20151016/riblnul1gm205.png)
要注意的是,此時(shí)該分支變?yōu)楦櫡种Я恕?/font>

分支2015.07.29.HelloWebAPI1.0已經(jīng)推送到遠(yuǎn)端存儲(chǔ)庫了。
![clipboard[161] clipboard[161]](http://s1.VeVb.com/20151016/d0nfpcg2cnd05.png)
2,合并分支
為了模擬實(shí)際情形,先在分支2015.07.29.HelloWebAPI1.0上做些修改,然后提交更改,最后將分支合并到主線上。
在test2.txt中添加一行新的記錄,并提交更改到本地存儲(chǔ)庫
![clipboard[162] clipboard[162]](http://s1.VeVb.com/20151016/eik5dioc4tq06.png)
![clipboard[163] clipboard[163]](http://s1.VeVb.com/20151016/icdymscke5u06.png)
切換到分支窗口,先切換到主線(master)分支,然后點(diǎn)擊合并按鈕,從分支合并選擇源分支2015.07.29.HelloWebAPI1.0,當(dāng)前分支選擇目標(biāo)分支master,然后點(diǎn)擊合并按鈕開始合并。
![clipboard[164] clipboard[164]](http://s1.VeVb.com/20151016/4rsnf55f23a06.png)
合并,提交更改成功提示
![clipboard[165] clipboard[165]](http://s1.VeVb.com/20151016/nokjiseruuv06.png)
分支更新的代碼已經(jīng)合并過來了。
![clipboard[166] clipboard[166]](http://s1.VeVb.com/20151016/i4zhilthndf06.png)
推送更改到遠(yuǎn)端存儲(chǔ)庫
![clipboard[167] clipboard[167]](http://s1.VeVb.com/20151016/bhudkv5tdfm07.png)
進(jìn)入GitLab,已經(jīng)可以看到提交更改記錄,并且主線代碼已經(jīng)更新了。
![clipboard[168] clipboard[168]](http://s1.VeVb.com/20151016/ogbj1cyl3fr08.png)
主線代碼已經(jīng)更新
![clipboard[169] clipboard[169]](http://s1.VeVb.com/20151016/bzady5momf008.png)
3,刪除分支
首先從遠(yuǎn)端刪除分支

此時(shí)本地對(duì)應(yīng)的分支就由跟蹤分支為普通分支了,直接刪除即可。

這樣,分支2015.08.27就被完整刪除了。
當(dāng)團(tuán)隊(duì)中兩人或多個(gè)同時(shí)修改同一文件的同一代碼段,后提交更改或獲取更新的人就會(huì)碰到?jīng)_突。
1,沖突發(fā)生
以主線(master)的文件test1.txt為例,假如兩人同時(shí)修改它。
張三在test1.txt的第3和4行新增兩行代碼,并提交到本地存儲(chǔ)庫。
![clipboard[170] clipboard[170]](http://s1.VeVb.com/20151016/qm31titnndf09.png)
李四也在test1.txt的第3和第4行新增兩行代碼,并提交更改和推送到遠(yuǎn)端存儲(chǔ)庫。
![clipboard[171] clipboard[171]](http://s1.VeVb.com/20151016/tt2ji3ewqka09.png)
如果張三再去推送的話, 沖突就發(fā)生了。
![clipboard[172] clipboard[172]](http://s1.VeVb.com/20151016/xotmoksgtyl09.png)
![clipboard[173] clipboard[173]](http://s1.VeVb.com/20151016/0ikyam13kbh09.png)
2,解決沖突
先獲取并拉取最新,然后解決沖突。
獲取并拉取最新版本
![clipboard[174] clipboard[174]](http://s1.VeVb.com/20151016/zhlr0py5o5z09.png)
點(diǎn)擊解決沖突鏈接,進(jìn)入到解決沖突窗口
![clipboard[175] clipboard[175]](http://s1.VeVb.com/20151016/aozimzm1fte09.png)
點(diǎn)擊合并按鈕
![clipboard[176] clipboard[176]](http://s1.VeVb.com/20151016/fg33hkaxsnu10.png)
![clipboard[177] clipboard[177]](http://s1.VeVb.com/20151016/qvl1wegdowp10.png)
源和目標(biāo)的更改都勾選上,并且點(diǎn)擊接受合并
![clipboard[178] clipboard[178]](http://s1.VeVb.com/20151016/4nau5m1osc010.png)
提交合并
![clipboard[179] clipboard[179]](http://s1.VeVb.com/20151016/dzqffwyxlqt10.png)
GitLab已更新
![clipboard[180] clipboard[180]](http://s1.VeVb.com/20151016/dnkgmfgfvf410.png)
1,使用TortoiseGit等工具手動(dòng)推送。
2,使用其它工具,可以參考下面文章。
1),http://m.survivalescaperooms.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
系統(tǒng)變量的path里加上:
;C:/Program Files (x86)/Git/bin;F:/Users/Desktop/GitTfs-0.22.0/
新開cmd,執(zhí)行命令
md C:/PackageFH
cd C:/PackageFH
git-tfs clone http://hp580tfssz:8080/tfs/WingonTravel $/PackageFH/MainLine
安裝程序可以從以下路徑獲得:
//172.18.21.12/技術(shù)開發(fā)部/轉(zhuǎn)運(yùn)站/Software/git/TortoiseGit-1.8.14.0_64bit.1436148947.msi
主要有以下幾個(gè)步驟
1,創(chuàng)建本地倉庫

點(diǎn)擊OK,即創(chuàng)建本地倉庫成功。

2,設(shè)置
設(shè)置用戶信息和遠(yuǎn)端倉庫url


點(diǎn)擊確定,設(shè)置完成。
3,提交到本地倉庫


點(diǎn)擊OK,代碼就提交到本地倉庫了。
4,推送到遠(yuǎn)端倉庫



推送成功

查看GitLab,代碼已經(jīng)同步過去了。

|
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注