olNGIb4NkK5r2x7x4oG3GpEzizVpnY6KNCck9cym

如何替 git 管理的專案倉庫,設定多個遠端倉庫?

被 Git 管理的專案倉庫,可以關聯多個遠端倉庫,我們可以使用命令行進行設定,或者直接修改 .git 文件中的配置文件。

有時候一個程式專案的程式碼會託管於多個代碼託管平台,像是筆者有些專案會同時託管在 GitHub 以及個人自建的 Gitea 實例上。

那麼問題來了:要如何設置才能讓一個被 Git 所管理的專案倉庫,能夠同時關聯到多個遠端倉庫呢?一般來說,可以使用命令行或者直接修改 .git 目錄中的 config 文件來設定,以下個別說明。

使用命令行工具

我們可以使用以下命令,替 Git 管理的專案倉庫添加遠端倉庫:

# 添加遠端倉庫
$ git remote add [remote-name] [url]

# 檢查遠端倉庫設定
$ git remote -v
$ git remote --verbose

其中 [remote-name] 是方便 Git 識別與使用者操作的遠端倉庫名稱,在設置好遠端倉庫之後,便可以在執行 git push 命令時,指定遠端倉庫名稱來推送到不同的遠端倉庫了:

# 推送到指定的遠端倉庫
$ git push [remote-name]
執行 git push 時如果沒有帶上遠端倉庫名稱,預設會推送到名為 origin 的遠端倉庫,這是執行 git clone [url] 命令所克隆的遠端倉庫的預設名稱。如果要修改 git push 推送的預設上游倉庫,可以使用 git push -u [remote-name] [branch-name] 來設定。

修改專案倉庫配置

執行前面的命令行的結果,實際上是會修改專案倉庫中 .git 目錄內的配置文件,因此我們也可以使用慣用的編輯器直接修改 .git/config 文件中的內容:

[core]
    ...
[remote "github"]
    url = git@github.com:user/demo.git
    fetch = +refs/heads/*:refs/remotes/github/*
[remote "gitea"]
    url = git@gitee.com:user/demo.git
    fetch = +refs/heads/*:refs/remotes/gitea/*
[branch "main"]
    remote = github
    merge = refs/heads/main
上述範例中的 [branch "main"] 設定,便是用來設定指定分枝 main 的預設遠端倉庫(或稱上游倉庫),亦即執行 git push 如果沒有帶上遠端倉庫名稱時所推送的遠端倉庫。

張貼留言