經(jīng)過(guò)老師的初步考慮篓叶,我們暫時(shí)放棄Phabricator,完全使用GitLab來(lái)管理我們的項(xiàng)目羞秤。這個(gè)決定老師綜合考慮了各方面因素缸托,而且GitLab口碑出眾,是個(gè)潮牌瘾蛋,對(duì)以后的工作也大有裨益嗦董,相信大家會(huì)喜歡上它的,每天不用兩把都不舒服瘦黑。
一、第三方評(píng)價(jià)
(一)Slant評(píng)價(jià)
??2017年Slant社區(qū)關(guān)于"最好的web自托管Git倉(cāng)庫(kù)是什么奇唤?"的討論里幸斥,Gitlab排名第一,Phabricator排名第三咬扇。也能證明甲葬,Gitlab對(duì)于我們這樣長(zhǎng)期50-100人且流動(dòng)性強(qiáng)的校園團(tuán)隊(duì)來(lái)講,是完全夠用的懈贺。
詳情可看這里.
(二)Forrester關(guān)于Gitlab CI/CD評(píng)價(jià)
??CI/CD是Gitlab的持續(xù)集成/持續(xù)交付功能经窖,我們現(xiàn)在還不需要使用,它在2017年Forrester中排名第一梭灿。
??GitLab cited as a Leader in The Forrester Wave?: Continuous Integration Tools, Q3 2017 report released today.
Forrester的評(píng)價(jià):“GitLab’s vision is to serve enterprise-scale, integrated software development teams that want to spend more time writing code and less time maintaining their tool chain.”
二画侣、我們?nèi)绾问褂?/h2>
我們的GitLab地址已經(jīng)發(fā)布到組內(nèi)的wiki上了,大家只需要記妆ざ省:
- 外網(wǎng)的GitLab一行代碼都不存配乱,這是學(xué)生、老師和合作單位互相交流issues的平臺(tái)皮迟。
- 內(nèi)網(wǎng)的GitLab存我們的代碼搬泥,管理我們的項(xiàng)目。
為什么不用一個(gè)GitLab主要是考慮到安全問(wèn)題伏尼,代碼放內(nèi)網(wǎng)肯定是最安全的忿檩。
基礎(chǔ)使用
如果你有基礎(chǔ),首先在Gitlab新建一個(gè)項(xiàng)目爆阶,然后看看項(xiàng)目下面一個(gè)簡(jiǎn)單的tutorial就可以了:
命令行指令
Git 全局設(shè)置
git config --global user.name "xxx"
git config --global user.email "xxx@gmail.com"
創(chuàng)建新版本庫(kù)
git clone http://192.168.131.172:9999/xxx/projectname
cd projectname
touch README.md
git add README.md
git commit -m "add README"
git push -u origin master
已存在的文件夾
cd existing_folder
git init
git remote add origin http://192.168.131.172:9999/xxx/projectname
git add .
git commit -m "Initial commit"
git push -u origin master
已存在的 Git 版本庫(kù)
cd existing_repo
git remote add origin http://192.168.131.172:9999/xxx/projectname
git push -u origin --all
git push -u origin --tags
但是光看這些還是不太夠燥透,我們舉點(diǎn)實(shí)際的例子講解下沙咏,以后忘了可以再查閱。
場(chǎng)景1. 已經(jīng)有一個(gè)正在做的項(xiàng)目或者做完的項(xiàng)目兽掰,如何使用git并添加進(jìn)遠(yuǎn)程倉(cāng)庫(kù)GitLab中芭碍?
首先假設(shè)我們有個(gè)工程ch02(你可以找一個(gè)自己的項(xiàng)目跟著做)如下:
我們看左邊的sideBar里面的工程目錄,文件有:
- digits文件夾:數(shù)據(jù)文件
- datingTestSet.txt:數(shù)據(jù)文件
- datingTestSet2.txt:數(shù)據(jù)文件
- kNN.py:代碼文件
- test.py:代碼文件
1.1在工程中使用git版本控制
我們進(jìn)入已有的工程目錄下:執(zhí)行命令:
git init
這樣我們就在項(xiàng)目中使用上了git
孽尽,并且默認(rèn)進(jìn)入了master
分支窖壕。
現(xiàn)在我們使用命令
git status
查看項(xiàng)目的追蹤狀態(tài),這就像我們平時(shí)使用ls
命令一樣杉女。
可以看到git提示我們瞻讽,我們有一些文件沒(méi)有追蹤,它們是我們已經(jīng)提到的:
- digits文件夾:數(shù)據(jù)文件
- datingTestSet.txt:數(shù)據(jù)文件
- datingTestSet2.txt:數(shù)據(jù)文件
- kNN.py:代碼文件
- test.py:代碼文件
1.2 忽略大的數(shù)據(jù)文件
其中有一些東西是我們不需要追蹤的熏挎,甚至不能追蹤的速勇,比如數(shù)據(jù)文件,原因有二:
- 對(duì)項(xiàng)目沒(méi)有意義坎拐,且傳到GitLab上會(huì)有泄漏數(shù)據(jù)的風(fēng)險(xiǎn)烦磁。
- 因?yàn)樗麄兒艽螅瑒?dòng)輒幾G哼勇,追蹤他們會(huì)使git操作變得巨慢都伪。
所以我們需要了解git中的.gitignore
文件,拆開(kāi)看就是git ignore
,很直白积担,他可以告訴git
陨晶,哪些文件我們忽略不追蹤。
我們直接用編輯器編輯文件(看你個(gè)人喜好)帝璧,這里用的vim編輯如下:
可以看到語(yǔ)法非常簡(jiǎn)單先誉,即忽略所有數(shù)據(jù)文件:
- digits文件夾
- datingTestSet.txt
- datingTestSet2.txt
如果你有其他大型項(xiàng)目開(kāi)發(fā),這里有模板可以參考的烁,但是我們做NLP的應(yīng)該暫時(shí)可以不用管褐耳,暫時(shí)還用不上。
現(xiàn)在我們?cè)俅问褂?code>git status查看:
就發(fā)現(xiàn)我們成功的忽略掉了數(shù)據(jù)文件撮躁,只剩下代碼文件了漱病。
1.3 把本地倉(cāng)庫(kù)同遠(yuǎn)程GitLab倉(cāng)庫(kù)關(guān)聯(lián)
首先我們要進(jìn)入GitLab創(chuàng)建一個(gè)空倉(cāng)庫(kù),用于接收這個(gè)本地項(xiàng)目把曼。倉(cāng)庫(kù)的項(xiàng)目名稱最好和本地一樣杨帽,免得自己混淆。
權(quán)限說(shuō)明:
- Private: 私人倉(cāng)庫(kù)嗤军,項(xiàng)目只有自己能看到注盈,其他人都不能看到,包括系統(tǒng)管理員叙赚。
- Internal: 項(xiàng)目只有登錄賬戶可看老客。
- Public: 項(xiàng)目即使是游客都能看到僚饭。
創(chuàng)建好后可以看到這個(gè)界面:
我們復(fù)制好git倉(cāng)庫(kù)地址,在我這邊是http://192.168.131.172:9999/joezhow/ch02.git
胧砰,然后進(jìn)入命令行鳍鸵,輸入:
git add . && git status
把代碼提交到git的緩存區(qū),然后輸入:
git commit -m "保存已經(jīng)完成的kNN代碼"
把代碼提交到git的本地倉(cāng)庫(kù)尉间。
現(xiàn)在關(guān)聯(lián)遠(yuǎn)程倉(cāng)庫(kù)偿乖,輸入:
git remote add origin http://192.168.131.172:9999/joezhow/ch02.git
然后我們就把本地倉(cāng)庫(kù)和遠(yuǎn)程倉(cāng)庫(kù)建立起了一條關(guān)聯(lián)渠道,git remote
是和git
遠(yuǎn)程操作相關(guān)的命令哲嘲,add origin
是指把倉(cāng)庫(kù)地址http://192.168.131.172:9999/joezhow/ch02.git
贪薪,以別名origin
保存下來(lái),方便我們的push
操作眠副,不然每次push
都寫(xiě)這么大串地址十分不方便画切,我們可以通過(guò)
git remote -v
命令查看詳細(xì)內(nèi)容
關(guān)于這個(gè)fetch我們后文會(huì)講,首先我們講push囱怕。
現(xiàn)在我們已經(jīng)有了通道霍弹,我們通過(guò)命令
git push -u origin master
這個(gè)命令會(huì)把master分支傳到遠(yuǎn)程倉(cāng)庫(kù)origin的master分支上,-u參數(shù)可加可不加娃弓,加了會(huì)更好庞萍,為什么我現(xiàn)在也說(shuō)不清楚。
然后它可能會(huì)叫你輸入你Gitlab的賬號(hào)和密碼忘闻,輸入過(guò)后,代碼即push到遠(yuǎn)程倉(cāng)庫(kù)了恋博。
場(chǎng)景2. 項(xiàng)目被師兄添加了高端新代碼齐佳,我怎么更新?
比如我們的ch02項(xiàng)目中债沮,我今天的工作就是做了kNN炼吴,像上圖那樣就已經(jīng)做完了,然后師兄又做了另一個(gè)更加高效的kNN實(shí)現(xiàn)代碼kNN1.py疫衩,并且上傳到遠(yuǎn)程倉(cāng)庫(kù)硅蹦,如下圖:
而我們本地倉(cāng)庫(kù)沒(méi)有kNN1.py文件,所以我們需要把本地倉(cāng)庫(kù)ch02項(xiàng)目的代碼更新闷煤,我們獲得遠(yuǎn)程倉(cāng)庫(kù)的最新版本:
git fetch origin master
這句話的意思是從遠(yuǎn)程的origin倉(cāng)庫(kù)的master分支下載代碼到本地的origin master童芹,這條語(yǔ)句是很安全的羽峰,可以隨意使用篷牌,因?yàn)樗粫?huì)覆蓋掉本地倉(cāng)庫(kù)的代碼。
接下來(lái)我們對(duì)比本地master和origin master代碼有哪些不同:
git log -p master.. origin/master
這里按行解釋下:
- commitID
- 作者
- 提交時(shí)間
- commit的內(nèi)容
- 添加了一個(gè)文件kNN1.py
- 添加的內(nèi)容
然后我們需要這份高效的代碼杂抽,使用命令:
git merge origin/master
即可合并到本地倉(cāng)庫(kù)近顷。
場(chǎng)景3.多人協(xié)作中生音,學(xué)弟應(yīng)該如何正確push宁否,并給Mentor發(fā)起Merge?
多人協(xié)作中缀遍,我們要規(guī)范在dev分支開(kāi)發(fā)慕匠,主master分支只接受穩(wěn)定版本,因此域醇,在Gitlab的項(xiàng)目權(quán)限中僅有少數(shù)的mentor可以對(duì)代碼的master分支進(jìn)行merge台谊,即有權(quán)限更新master分支代碼。這樣可以保證新人不會(huì)隨便把質(zhì)量不好的代碼push或者merge到主分支上歹苦。所以我們實(shí)際開(kāi)發(fā)使用dev開(kāi)發(fā)青伤,mentor也應(yīng)該如此。
這里假設(shè)學(xué)弟寫(xiě)了個(gè)比kNN1更高效kNN2殴瘦,add commit后狠角,輸入以下命令,把dev分支push到origin的dev分支上:
git push -u origin dev
師弟需要進(jìn)入Gitlab蚪腋,進(jìn)入dev分支中會(huì)發(fā)現(xiàn)項(xiàng)目比master分支多一個(gè)kNN2.py文件丰歌,最重要的是多出了一個(gè)Create merge request
的按鈕:
這里要填寫(xiě)一些信息:
最重要的是這里的指派,把這個(gè)request指派給哪個(gè)mentor屉凯,然后提交立帖,接下來(lái)就是mentor的code review任務(wù)。
師兄就會(huì)有一個(gè)合并請(qǐng)求和待辦事項(xiàng):
我們可以查看查看變更悠砚,直接在Gitlab的網(wǎng)頁(yè)在完成merge晓勇,也可以使用Check out branch
:
在本地命令行完成變更。
場(chǎng)景4.在項(xiàng)目中添加member
我們找到項(xiàng)目的設(shè)置->成員:
在里面就可以添加新成員了:
總結(jié)
這樣一個(gè)簡(jiǎn)單的團(tuán)隊(duì)workflow就講完了灌旧,同學(xué)們不會(huì)的問(wèn)題绑咱,請(qǐng)?jiān)谕饩W(wǎng)的gitlab的gitlab-question/issues里留下問(wèn)題,后續(xù)可以更新枢泰。
結(jié)語(yǔ):蘇州大學(xué)HLT團(tuán)隊(duì)(人類語(yǔ)言技術(shù)研究所描融,所長(zhǎng)張民),是從新加坡回國(guó)的年輕團(tuán)隊(duì)衡蚂,所長(zhǎng)張民擔(dān)任蘇州大學(xué)副院長(zhǎng)窿克,國(guó)家杰出青年學(xué)者,本團(tuán)隊(duì)長(zhǎng)期招收有夢(mèng)想的優(yōu)質(zhì)本科畢業(yè)生毛甲。主攻方向?yàn)槿斯ぶ悄茏钪匾囊鍺LP技術(shù)年叮,組內(nèi)有如知識(shí)圖譜、語(yǔ)音翻譯玻募、句法分析等各種方向谋右,畢業(yè)大半去往BAT或感興趣深造讀博,歡迎感興趣的同學(xué)聯(lián)系報(bào)考补箍。詳情請(qǐng)看:蘇州大學(xué)人類語(yǔ)言技術(shù)研究所