簡體中文 ▾ 主題 ▾ 最新版本 ▾ git-remote 最後更新於 2.45.0

名稱

git-remote - 管理跟蹤的倉庫集

概要

git remote [-v | --verbose]
git remote add [-t <branch>] [-m <master>] [-f] [--[no-]tags] [--mirror=(fetch|push)] <name> <URL>
git remote rename [--[no-]progress] <old> <new>
git remote remove <name>
git remote set-head <name> (-a | --auto | -d | --delete | <branch>)
git remote set-branches [--add] <name> <branch>…​
git remote get-url [--push] [--all] <name>
git remote set-url [--push] <name> <newurl> [<oldurl>]
git remote set-url --add [--push] <name> <newurl>
git remote set-url --delete [--push] <name> <URL>
git remote [-v | --verbose] show [-n] <name>…​
git remote prune [-n | --dry-run] <name>…​
git remote [-v | --verbose] update [-p | --prune] [(<group> | <remote>)…​]

描述

管理你跟蹤其分支的倉庫("遠端")的集合。

選項

-v
--verbose

稍微詳細一些,並在名稱後顯示遠端 URL。對於 promisor 遠端,還會顯示配置了哪些過濾器(blob:none 等)。注意:這必須放在 remote 和子命令之間。

命令

不帶引數時,顯示現有遠端列表。有幾個子命令可用於對遠端執行操作。

add

為 <URL> 處的倉庫新增一個名為 <name> 的遠端。然後可以使用 git fetch <name> 命令來建立和更新遠端跟蹤分支 <name>/<branch>

使用 -f 選項時,在設定完遠端資訊後立即執行 git fetch <name>

使用 --tags 選項時,git fetch <name> 會從遠端倉庫匯入所有標籤。

使用 --no-tags 選項時,git fetch <name> 不會從遠端倉庫匯入標籤。

預設情況下,僅匯入已獲取分支上的標籤(請參閱 git-fetch[1])。

使用 -t <branch> 選項,而不是預設的 glob refspec 來跟蹤 refs/remotes/<name>/ 名稱空間下的所有分支,而是建立一個僅跟蹤 <branch> 的 refspec。你可以給出多個 -t <branch> 來跟蹤多個分支,而無需獲取所有分支。

使用 -m <master> 選項,將設定一個符號引用 refs/remotes/<name>/HEAD 來指向遠端的 <master> 分支。另請參閱 set-head 命令。

當使用 --mirror=fetch 建立一個 fetch mirror 時,引用不會儲存在 refs/remotes/ 名稱空間中,而是遠端的 refs/ 下的任何內容都會直接映象到本地倉庫的 refs/ 中。此選項僅在裸倉庫中有意義,因為 fetch 會覆蓋任何本地提交。

當使用 --mirror=push 建立一個 push mirror 時,git push 將始終表現得好像傳遞了 --mirror

rename

將名為 <old> 的遠端重新命名為 <new>。所有遠端跟蹤分支和遠端的配置設定都會被更新。

如果 <old> 和 <new> 相同,並且 <old> 是 $GIT_DIR/remotes$GIT_DIR/branches 下的一個檔案,則該遠端將被轉換為配置檔案格式。

remove
rm

刪除名為 <name> 的遠端。所有遠端跟蹤分支和遠端的配置設定都會被刪除。

set-head

設定或刪除指定遠端的預設分支(即符號引用 refs/remotes/<name>/HEAD 的目標)。遠端擁有預設分支不是必需的,但它允許用遠端名稱本身來代替特定的分支。例如,如果 origin 的預設分支設定為 master,那麼可以在任何原本需要指定 origin/master 的地方指定 origin

使用 -d--delete,將刪除符號引用 refs/remotes/<name>/HEAD

使用 -a--auto,將查詢遠端以確定其 HEAD,然後將符號引用 refs/remotes/<name>/HEAD 設定為同一分支。例如,如果遠端 HEAD 指向 next,那麼 git remote set-head origin -a 將把符號引用 refs/remotes/origin/HEAD 設定為 refs/remotes/origin/next。只有當 refs/remotes/origin/next 已存在時,此操作才有效;否則,必須先進行 fetch。

使用 <branch> 顯式設定符號引用 refs/remotes/<name>/HEAD。例如,git remote set-head origin master 將把符號引用 refs/remotes/origin/HEAD 設定為 refs/remotes/origin/master。只有當 refs/remotes/origin/master 已存在時,此操作才有效;否則,必須先進行 fetch。

set-branches

更改指定遠端跟蹤的分支列表。這可用於在遠端初始設定後跟蹤遠端可用分支的子集。

指定的受跟蹤分支將按照在 git remote add 命令列的 -t 選項中所指定的方式進行解釋。

使用 --add 時,不是替換當前跟蹤的分支列表,而是將新分支新增到該列表中。

get-url

檢索遠端的 URL。在此會展開 insteadOfpushInsteadOf 的配置。預設情況下,僅列出第一個 URL。

使用 --push 時,查詢的是 push URL 而不是 fetch URL。

使用 --all 時,將列出遠端的所有 URL。

set-url

更改遠端的 URL。將遠端 <name> 中第一個匹配正則表示式 <oldurl> 的 URL(如果未給出 <oldurl>,則為第一個 URL)更改為 <newurl>。如果 <oldurl> 不匹配任何 URL,則會發生錯誤且不進行任何更改。

使用 --push 時,將操作 push URL 而不是 fetch URL。

使用 --add 時,不是更改現有 URL,而是新增新 URL。

使用 --delete 時,不是更改現有 URL,而是刪除遠端 <name> 中所有匹配正則表示式 <URL> 的 URL。嘗試刪除所有非 push URL 會導致錯誤。

請注意,push URL 和 fetch URL 儘管可以設定不同,但它們仍然必須指向同一個地方。你推送到 push URL 的內容應該與你在立即從 fetch URL 獲取時看到的內容一致。如果你試圖從一個地方(例如你的上游)獲取,然後推送到另一個地方(例如你的釋出倉庫),請使用兩個獨立的遠端。

show

提供關於遠端 <name> 的一些資訊。

使用 -n 選項時,不會先使用 git ls-remote <name> 查詢遠端 HEAD;而是使用快取的資訊。

prune

刪除與 <name> 相關的陳舊引用。預設情況下,會刪除 <name> 下的陳舊遠端跟蹤分支,但根據全域性配置和遠端的配置,我們甚至可能會修剪未推送到那裡的本地標籤。相當於 git fetch --prune <name>,只是不會獲取新的引用。

請參閱 git-fetch[1] 的 PRUNING 部分,瞭解根據各種配置會修剪哪些內容。

使用 --dry-run 選項,報告將要被修剪的分支,但實際上不進行修剪。

update

根據 remotes.<group> 的定義,獲取倉庫中遠端或遠端組的更新。如果命令列中沒有指定組或遠端,則使用配置引數 remotes.default;如果 remotes.default 未定義,則會更新所有未設定 remote.<name>.skipDefaultUpdate 為 true 的遠端。(請參閱 git-config[1])。

使用 --prune 選項時,會對所有更新的遠端執行修剪操作。

討論

遠端配置是透過 remote.origin.urlremote.origin.fetch 配置變數實現的。(請參閱 git-config[1])。

退出狀態

成功時,退出狀態為 0

addrenameremove 等子命令找不到指定的遠端時,退出狀態為 2。當遠端已存在時,退出狀態為 3

發生任何其他錯誤時,退出狀態可能是任何其他非零值。

示例

  • 新增一個新遠端,獲取並檢出其中的一個分支

    $ git remote
    origin
    $ git branch -r
      origin/HEAD -> origin/master
      origin/master
    $ git remote add staging git://git.kernel.org/.../gregkh/staging.git
    $ git remote
    origin
    staging
    $ git fetch staging
    ...
    From git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging
     * [new branch]      master     -> staging/master
     * [new branch]      staging-linus -> staging/staging-linus
     * [new branch]      staging-next -> staging/staging-next
    $ git branch -r
      origin/HEAD -> origin/master
      origin/master
      staging/master
      staging/staging-linus
      staging/staging-next
    $ git switch -c staging staging/master
    ...
  • 模仿 git clone 但只跟蹤選定的分支

    $ mkdir project.git
    $ cd project.git
    $ git init
    $ git remote add -f -t master -m master origin git://example.com/git.git/
    $ git merge origin

GIT

Git[1] 套件的一部分