github 多人協作
最近需要團隊合作寫一個程序,終於要見識到git厲害的多人協作了,記錄下過程,方便回顧。
首先在分支策略上有一個很好的文檔可以看,由Vincent Driessen提出,非常簡潔明瞭,各個分支的功能明確。
git主分支的名字默認叫master,它是自動創建的,並且默認將本地與遠程的master分支統一。主分支主要用來發布重要版本,日常開發應該在另一條分支上進行,我們把開發用的分支叫做Devlop分支,在dev分支上開發好後再合併到master分支上進行發佈。
將develop分支發佈到master分支的命令:
git checkout master #切換到master分支
git merge --no-ff dev #--no-f是快進式合併的意思
對於多人合作而言這兩個分支都需要推送到遠程庫。
git checkout -b dev
git push origin dev
而每個人用於開發的分支,如個人分支,功能分支等可以按需求選擇是否推送。
功能分支以及用於修復bug的臨時分支在完成後類似上面dev與master的合併操作一樣,我們將feature分支與dev分支合併,合併後都可以刪除掉:
git checkout -d feature2
以上是總體的一個分支框架,即小組成員在各自負責的分支上工作,完成後向開發分支dev進行合併,合併後可以刪除這些工作分支。遇到bug時可以新建一個臨時的bug分支進行修改。下面說一下具體的操作問題。
首先我將另一個小夥伴添加爲我的協作者:
我的倉庫——>settings——>Collaborators然後輸入小夥伴的用戶名add進來就可以了。然後小夥伴就可以在他的電腦上clone我的倉庫裏的代碼並有寫入權限。
git clone [email protected]:yourname/rep_name.git
使用git branch命令查看分支
git branch
* master
只有master分支,因爲當他從遠程庫clone時默認只能看到本地的master分支,上文已經說過我們儘量在開發分支dev上進行日常,所以必須創建遠程origin的dev分支到本地,於是他用這個命令創建本地分支:
git checkout -b origin/dev
現在他就可以在本地創建一個自己的分支,這個分支如果不用與他人合作就可以不用推送,也就只有他自己知道~,然後將寫好的和dev分支進行合併,確認好後再將dev分支push到遠程:
git checkout -b feature_by_him #新建分支並編碼提交
git add somefeature.py
git commit -m "some feature complete by him"
git checkout dev #切換到dev
git merge --no-ff feature_by_him #合併修改
git push origin dev #推送到遠程dev
這樣就保證了多人合作,並且在dev分支上進行合併。但是,如果這時候我也在完成了一部分代碼並且合併到dev上了,修改的部分與小夥伴的有衝突就會推送失敗。
按照提示
git pull
git pull也失敗了,原因是沒指定本地dev分支與遠程origin/dev分支的鏈接,根據提示設置:
然後再嘗試pull:
pull成功後提示你需要手動解決衝突然後提交,提示顯示衝突文件是README.md,或者你可以用git status 查看衝突文件:
直接查看README文件可以看到不同分支的修改內容,用<<<<, ====, >>>>分開:
我們手動修改後保持並提交:
git add README.md
git commit -m "conflict test finish"
git push origin dev
衝突解決,現在可以在遠程庫看到你解決衝突後的版本了
用參數的 git log我們可以看到分支的合併情況:
最後直接截下了了廖雪峯老師這部分的總結,這篇文章基本是按照他的流程來的,受益匪淺!