如何在 git 别名中引用远程存储库?
How to reference remote repositories in a git alias?
如何引用 git 别名来对名为 "origin" 的远程存储库上的等效跟踪分支执行操作?例如,如果我在本地仓库的 "foo" 分支上,并且我想 运行 一个通常默认为我的 "origin/foo" 分支的命令,我该怎么做?
这是一个具体的例子:
我想查看来自我的 "origin/foo" 分支的传入提交,我在本地 "foo" 分支上。为此,我会 运行 git fetch && git log --pretty=oneline --abbrev-commit ..origin/foo
。因此,我设置了一个 git incoming
别名,如下所示:
[alias]
incoming = !git fetch && git log --pretty=oneline --abbrev-commit ..@{u}
但是,此别名被解释为 git fetch && git log --pretty=oneline --abbrev-commit ..upstream/foo
,其中 @{u}
是上游远程上等效分支的替代。我想执行相同的命令,但在 origin 远程的等效分支上。我怎样才能做到这一点?我尝试了 @{o}
,但这不起作用,而且我在 git 别名文档中的任何地方都找不到此语法。我从@sschuberth 在 this answer 中的评论中得出我的答案,但我没有找到其他文档。
更新
我找到了一个接近的解决方案,但它使用 bash 参数而不是 git 别名:
incoming = !git fetch && git log --pretty=oneline --abbrev-commit ..
这里的缺点是我无法利用 git 提供的自动完成功能,它不会自动将我的本地分支与远程 origin
存储库的分支进行比较。
请注意,据我所知 Git still does not properly support a "triangular" workflow 你从 "upstream" 远程拉取,应用你的更改,然后推送到 "origin" 远程(这是你的分支上游项目)。 Git 的维护者 Junio 说
Note that even in a triangular workflow, <at> {u} should still refer to
the place you integrate with, i.e. your "upstream", not to the place
you push to publish the result of your work.
每个本地分支只能有一个远程跟踪分支,并且要么是 upstream
中的相应分支,要么是 origin
中的相应分支。 @{u}
指向配置为远程跟踪分支的任何内容,与语义上这是您的上游项目还是分叉项目无关。令人困惑的是,Git 文档将 @{u}
称为 "upstream" 的 shorthand,但实际上它大部分时间指向的通常是 "origin"。
长话短说,要让 @{u}
像您希望的那样工作,您需要将本地分支 foo
的远程跟踪分支从 upstream/foo
更改为 origin/foo
使用git branch --set-upstream-to origin/foo
.
编辑: 如果您喜欢冒险,您也可以尝试使用 Felipe Contreras' fork of Git which adds the concept of a "publish" tracking branch.
如何引用 git 别名来对名为 "origin" 的远程存储库上的等效跟踪分支执行操作?例如,如果我在本地仓库的 "foo" 分支上,并且我想 运行 一个通常默认为我的 "origin/foo" 分支的命令,我该怎么做?
这是一个具体的例子:
我想查看来自我的 "origin/foo" 分支的传入提交,我在本地 "foo" 分支上。为此,我会 运行 git fetch && git log --pretty=oneline --abbrev-commit ..origin/foo
。因此,我设置了一个 git incoming
别名,如下所示:
[alias]
incoming = !git fetch && git log --pretty=oneline --abbrev-commit ..@{u}
但是,此别名被解释为 git fetch && git log --pretty=oneline --abbrev-commit ..upstream/foo
,其中 @{u}
是上游远程上等效分支的替代。我想执行相同的命令,但在 origin 远程的等效分支上。我怎样才能做到这一点?我尝试了 @{o}
,但这不起作用,而且我在 git 别名文档中的任何地方都找不到此语法。我从@sschuberth 在 this answer 中的评论中得出我的答案,但我没有找到其他文档。
更新 我找到了一个接近的解决方案,但它使用 bash 参数而不是 git 别名:
incoming = !git fetch && git log --pretty=oneline --abbrev-commit ..
这里的缺点是我无法利用 git 提供的自动完成功能,它不会自动将我的本地分支与远程 origin
存储库的分支进行比较。
请注意,据我所知 Git still does not properly support a "triangular" workflow 你从 "upstream" 远程拉取,应用你的更改,然后推送到 "origin" 远程(这是你的分支上游项目)。 Git 的维护者 Junio 说
Note that even in a triangular workflow, <at> {u} should still refer to
the place you integrate with, i.e. your "upstream", not to the place
you push to publish the result of your work.
每个本地分支只能有一个远程跟踪分支,并且要么是 upstream
中的相应分支,要么是 origin
中的相应分支。 @{u}
指向配置为远程跟踪分支的任何内容,与语义上这是您的上游项目还是分叉项目无关。令人困惑的是,Git 文档将 @{u}
称为 "upstream" 的 shorthand,但实际上它大部分时间指向的通常是 "origin"。
长话短说,要让 @{u}
像您希望的那样工作,您需要将本地分支 foo
的远程跟踪分支从 upstream/foo
更改为 origin/foo
使用git branch --set-upstream-to origin/foo
.
编辑: 如果您喜欢冒险,您也可以尝试使用 Felipe Contreras' fork of Git which adds the concept of a "publish" tracking branch.