Git連結上游倉庫

2023-04-04 18:00:21

技術背景

在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等。完成上述操作後,如果我們在本地執行了一些更新,並且已經addcommit過了,那麼我們就可以向遠端倉庫進行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