Git
英语 ▾ 主题 ▾ 最新版本 ▾ 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> 选项,而不是远程跟踪 refs/remotes/<name>/ 命名空间下所有分支的默认 glob refspec,而是创建一个跟踪仅 <branch> 的 refspec。您可以提供多个 -t <branch> 来跟踪多个分支,而无需获取所有分支。

使用 -m <master> 选项,一个符号引用 refs/remotes/<name>/HEAD 被设置为指向远程的 <master> 分支。另请参阅 set-head 命令。

使用 --mirror=fetch 创建提取镜像时,ref 不会存储在 refs/remotes/ 命名空间中,而是远程上的所有内容都将直接镜像到本地存储库的 refs/ 中。此选项仅在裸存储库中才有意义,因为提取会覆盖任何本地提交。

使用 --mirror=push 创建推送镜像时,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/HEADrefs/remotes/origin/next。这只有在 refs/remotes/origin/next 已经存在时才有效;否则,必须先将其提取。

使用 <branch> 明确设置符号引用 refs/remotes/<name>/HEAD。例如,git remote set-head origin master 将设置符号引用 refs/remotes/origin/HEADrefs/remotes/origin/master。这只有在 refs/remotes/origin/master 已经存在时才有效;否则,必须先将其提取。

set-branches

更改名为远程跟踪的分支列表。这可用于在为远程进行初始设置后跟踪可用远程分支的子集。

名为分支将被解释为在 git remote add 命令行上使用 -t 选项指定一样。

使用 --add,而不是替换当前跟踪的分支列表,而是向该列表添加。

get-url

检索远程的 URL。insteadOfpushInsteadOf 的配置将在此处扩展。默认情况下,只列出第一个 URL。

使用 --push,将查询推送 URL 而不是提取 URL。

使用 --all,将列出远程的所有 URL。

set-url

更改远程的 URL。将与正则表达式 <oldurl> 匹配的远程 <name> 的第一个 URL(如果没有给出 <oldurl>,则为第一个 URL)设置为 <newurl>。如果 <oldurl> 与任何 URL 不匹配,则会发生错误,并且不会进行任何更改。

使用 --push,将操作推送 URL 而不是提取 URL。

使用 --add,而不是更改现有 URL,而是添加新的 URL。

使用 --delete,而不是更改现有 URL,而是从远程 <name> 中删除所有与正则表达式 <URL> 匹配的 URL。尝试删除所有非推送 URL 会导致错误。

请注意,推送 URL 和提取 URL 即使可以设置为不同,也必须仍然引用相同的位置。您推送到推送 URL 的内容应该与您立即从提取 URL 中提取的内容相同。如果您试图从一个地方提取(例如您的上游)并推送到另一个地方(例如您的发布存储库),请使用两个单独的远程。

show

提供有关远程 <name> 的一些信息。

使用 -n 选项,不会先使用 git ls-remote <name> 查询远程头部;而是使用缓存的信息。

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] 套件的一部分

scroll-to-top