文章目錄
注:轉載請標明原文出處鏈接:https://xiongyiming.blog.csdn.net/article/details/106153902
本地庫(Git倉庫)可以管理遠程庫(GitHub),一般地操作有pull, clone 和pull 操作,在實際協作開發項目是一般會有兩種情況:
第一種是團隊之間互相認識,共同開發項目。這樣可以建立私人項目或者公開項目,然後邀請項目成員共同開發,這樣其他人將看不到團隊的項目。
例如:如下圖所示,開發者A在GitHub上新建倉庫,接着新建一個分支然後邀請團隊成員開發者B在這個分支上提交代碼。開發者B在本地庫寫好的項目代碼推送到遠程庫的分支上,然後可以發送請求給開發者A,要求審覈代碼併合並分支,開發者A可以將代碼拉取下來查看。如果覺得代碼可以,那麼直接合並代碼即可,如果覺得代碼不可以,要求開發者B進行修改知道合格爲止。
第二種是開源的項目,全網都可以看到,任何開發者都可以對你的項目提出建議和修改,達到共同開發的目的。
例如:如下圖所示,開發者A在GitHub上新建倉庫,然後開發者C在GitHub上無意間看到了這個倉庫,覺得挺好就Fork該倉庫,於是開發者C就會出現該倉庫。開發者C將這個倉庫拉取(pull)本地庫進行改進然後推送(push)到自己的遠程庫上,此時開發者A的倉庫不會變化。
如果開發者C想要將自己的代碼合併到開發者倉庫中就要提出請求,然後開發者A進行審覈,如果通過開發者A覺得可以就進行合併。
以上兩種情況和GitHub協同開發基本類似,不同的是本地庫和遠程庫之間需要進行拉取(pull)和推送(push)操作,pull和push操作也是本地庫管理遠程庫的關鍵。下面就簡單介紹本地庫文件推送(push)到遠程庫、遠程庫文件拉取(pull)到本地庫等基本操作。
1 本地庫和遠程庫
本地庫就是開發者將文件提交到Git倉庫,此時Git倉庫文件還在本地電腦。通過Git倉庫可以管理GitHub遠程倉庫,例如Git倉庫可以推送到GitHub倉庫上,共享到社區,其他開發者可以看到這個倉庫,然後可以提出Bug和改進建議達到共同開發的目的。
(1) 建立本地庫
開發者A新建develop_A文件夾,然後通過git命令初始化,接着新建test_hello.cpp
文件提交到本地庫。如下圖所示:
(2) 建立遠程庫
開發者A在GitHub上新建一個項目(teamwork), 如下圖所示:
如下圖所示,複製teamwork倉庫地址:https://github.com/luohuayouyi666/teamwork.git
2 本地庫管理遠程庫的基本操作
2.1 本地庫推送(push)到遠程庫(GitHub)
本地庫推送到遠程庫命令格式爲:git push origin分支名
現在開發者A將本地庫推送到GitHub倉庫上, 由前面的操作可知,teamwork倉庫的地址爲:
https://github.com/luohuayouyi666/teamwork.git
由於地址太長不太好操作,可以用一個簡單的名稱(別名origin)代替復較長的地址,
起別名的命令爲格式爲:git remote add origin 遠程庫地址
例如:git remote add origin https://github.com/luohuayouyi666/teamwork.git 如下圖所示,還可以通過命令:git remote -v
查看當前的別名 判斷新名稱(別名)是否更新成功。
注意:
更改遠程地址別名命令:git remote add origin GitHub倉庫地址
刪除本地指定的遠程地址別名命令:git remote remove origin
例如使用命令:git push origin master
表示將本地庫master分支下文件推送到遠程庫
執行命令後,如下圖所示,推送報錯,是因爲遠程庫一個README.md文件在本地庫沒有,此時需要將遠程庫README.md拉取(pull)到本地庫(更新),然後再推送到遠程庫。
網上查詢的解決辦法,執行命令:git pull origin master --allow-unrelated-histories
結果如下圖所示:
接下來將本地庫推送到遠程庫,結果如下圖所示:
此時刷新網頁,查看GitHub倉庫有沒有更新文件,如下圖所示,文件成功的從本地庫提交到遠程庫。
2.2 遠程庫克隆(clone)到本地庫
遠程庫克隆(clone)到本地庫命令格式爲:git clone 遠程倉庫地址
任何開發者都可以將GitHub上的開源的項目克隆到本地倉庫。例如,前面操作的遠程倉庫有了兩個文件,如下圖所示:
下面新建文件夾test_clone文件夾,使用命令:git clone 遠程倉庫地址
將遠程倉庫文件下載下來,如下圖所示:
遠程庫克隆到本地庫的效果:
- 完整的把遠程庫下載到本地庫;
- 初始化本地庫;
2.3 遠程庫拉取(pull)到本地庫
遠程庫拉取(pull)到本地庫命令格式爲: git pull origin master
,origin爲遠程庫地址的別名。
將遠程庫文件更新到本地庫,本地工作區文件將會更新,如果本地有和遠程庫同名的文件,將會強制更新本地庫文件。
例如新建test_pull文件,新建123.txt文件,然後提交到本地庫,如下圖所示:
將遠程庫地址更改別名(git remote add origin 遠程庫地址
),然後執行命令:git pull origin master
此時發現,pull失敗,因爲本地庫有和遠程庫不相同的文件,此時可以通過命令:git pull origin master --allow-unrelated-histories
強制拉取(pull)
下面將本地庫文件全部推送到遠程庫,命令爲:git push origin master
,結果如下圖所示
此時刷新網頁,查看GitHub倉庫中123.txt文件成功的從本地庫提交到遠程庫,如下圖所示:
假設在GitHub倉庫中更改文件內容,此時本地庫內容沒有變,現在然後從將遠程庫拉取(pull)到本地庫,看看會不會強制更新本地庫文件內容。
由上圖可以看出,遠程庫123.txt文件被修改,此時將遠程庫拉取到本地庫,執行命令:git pull origin master
,結果如下圖所示,本地庫123.txt文件被更新了。
當然也可以通過命令: git fetch origin master
將遠程庫文件抓取到本地庫緩存區,此時本地庫和工作區文件並沒有被合併,
通過命令:git checkout origin/master
切換到本地庫緩存的分支上,然後通過命令: cat 文件名
來查看文件內容
。
接下來可以將緩存區分支文件和本地庫文件進行合併,通過命令:git checkout master切換到本地庫分支上,然後再將緩存區的分支合併到本地庫:命令爲:git merge origin/master
。
注: pull操作相當於 fetch + merge 操作。關於git pull命令和git fetch命令的區別可以參見博客:
3 團隊協作開發和跨團隊協作開發(開源項目)
團隊協作開發和跨團隊協作開發(開源項目)可以參考之前的博客:GitHub協作開發項目
其實重點是遠程倉庫和本地倉庫之間的推送(push)操作和拉取(pull)操作,因爲在這個過程中可能出現遠程庫文件和本地庫文件不相同,這是需要自己去判斷。具體的問題在實際操作中可能會遇到,等遇到了這些問題在更新自己的筆記。
參考資料
[1] https://www.bilibili.com/video/BV1pW411A7a5?p=36
[2] https://www.cnblogs.com/wbl001/p/11495110.html
[3] https://www.zhihu.com/question/38305012
[4] https://blog.csdn.net/a19881029/article/details/42245955
[5] https://blog.csdn.net/yangfengjueqi/article/details/82849826?utm_medium=distribute.pc_relevant.none-task-blog-baidujs-8
[6] https://www.cnblogs.com/xiaocai-ios/p/7779741.html