在Git的操作過程中,一般的組織內部工作模式可以在同一個倉庫上的master-develop-feature不同分支上進行開發,也有一些人和外部共同作業者會通過Fork到自己原生的倉庫進行更新的方案。但是對於Fork倉庫的更新有一個問題是,如果長期在自己本地更新,有可能會逐漸脫離原始的分支,甚至會產生眾多的衝突。那麼為了避免在開發過程中遇到眾多的衝突,建議大家在開發的過程中定期從遠端的原始倉庫同步過來。本文要探討的是,如何跟遠端的上游倉庫進行同步。
第一種方法非常的簡單粗暴,其實不建議使用,但是如果確實嫌麻煩的人,可以點選下圖中的圈圈按鈕,直接從原始倉庫強制拉取。
之所以不推薦這種方法,是因為在遠端拉取的過程中有可能出現衝突,但是因為採取了強制性拉取的策略,所以實際上本地開發的一些內容有可能會在拉取的過程中被覆蓋。
以下詳細介紹下遠端倉庫同步的方法。首先我們從遠端clone一個我們自己Fork的倉庫到本地來:
$ git clone https://gitee.com/dechin/mindsponge.git
正克隆到 'mindsponge'...
Username for 'https://gitee.com': dechin
Password for 'https://[email protected]':
remote: Enumerating objects: 7869, done.
remote: Counting objects: 100% (7869/7869), done.
remote: Compressing objects: 100% (2198/2198), done.
remote: Total 7869 (delta 5653), reused 7869 (delta 5653), pack-reused 0
接收物件中: 100% (7869/7869), 34.72 MiB | 1.15 MiB/s, 完成.
處理 delta 中: 100% (5653/5653), 完成.
進入本地目錄,檢視遠端連結:
$ cd mindsponge/
$ git remote -v
origin https://gitee.com/dechin/mindsponge.git (fetch)
origin https://gitee.com/dechin/mindsponge.git (push)
可以看到,此時只跟自己Fork的兩個倉庫有連結,也就是隻能pull或者push到origin的這個倉庫上面。然後可以使用git remote add
的方法新增原始倉庫的連結:
$ git remote add -t develop remote https://gitee.com/helloyesterday/mindsponge.git
上一步的操作中我們甚至可以使用-t
來設定與遠端倉庫構建連結的指定分支。此時我們再次檢視遠端連結:
$ git remote -v
origin https://gitee.com/dechin/mindsponge.git (fetch)
origin https://gitee.com/dechin/mindsponge.git (push)
remote https://gitee.com/helloyesterday/mindsponge.git (fetch)
remote https://gitee.com/helloyesterday/mindsponge.git (push)
我們發現多了兩個名為remote的連結,這個就是我們Fork來的原始倉庫。當然,要構建這種遠端的連結,需要擁有遠端倉庫的相關操作許可權,如push和fetch等。完成上述操作後,如果我們在本地執行了一些更新,並且已經add
和commit
過了,那麼我們就可以向遠端倉庫進行push:
$ git push origin develop
$ git push remote develop
只要有許可權,就兩邊都可以pull和push。這樣一來,我們在本地開發了一定的時間之後,也可以從remote上pull下來最新的程式碼,在本地解決好相關的衝突之後,push到自己Fork的分支。最後在完成特性的開發之後,再提交一個Pull Request到遠端remote的分支上,這樣是一個比較合理的Git操作。
通常來說,一個Git倉庫由內部組織者和外部共同作業者共同維護。對於內部開發者而言,他們可以通過master-develop-feature模型進行程式碼開發,在倉庫中建立相應的特性分支和開發分支,最後再合入到主分支供大家使用。而對於外部開發者而言,最好的方式是Fork一個倉庫到自己本地,然後使用本文介紹的方法二去定期跟遠端remote倉庫進行同步,避免在長時間的開發週期中遇到一些衝突。
本文首發連結為:https://www.cnblogs.com/dechinphy/p/git-remote.html
作者ID:DechinPhy
更多原著文章請參考:https://www.cnblogs.com/dechinphy/
打賞專用連結:https://www.cnblogs.com/dechinphy/gallery/image/379634.html
騰訊雲專欄同步:https://cloud.tencent.com/developer/column/91958
CSDN同步連結:https://blog.csdn.net/baidu_37157624?spm=1008.2028.3001.5343
51CTO同步連結:https://blog.51cto.com/u_15561675