“理解”;git remote show“;命令输出。。。这是“的意思;为';git推送'&引用;?
我有两个远程和两个本地分支机构:“理解”;git remote show“;命令输出。。。这是“的意思;为';git推送'&引用;?,git,github,git-branch,Git,Github,Git Branch,我有两个远程和两个本地分支机构: 本地分支“主”正在跟踪远程分支“源/主” 本地分支“镜像”正在跟踪远程分支“github/master” 这在我的.git/config文件中: ... [remote "origin"] url = http://my.gitlab.com/nandoquintana/repo.git fetch = +refs/heads/*:refs/remotes/origin/* [remote "github"] url = https
- 本地分支“主”正在跟踪远程分支“源/主”
- 本地分支“镜像”正在跟踪远程分支“github/master”
...
[remote "origin"]
url = http://my.gitlab.com/nandoquintana/repo.git
fetch = +refs/heads/*:refs/remotes/origin/*
[remote "github"]
url = https://github.com/nandoquintana/repo.git
fetch = +refs/heads/*:refs/remotes/github/*
[branch "master"]
remote = origin
merge = refs/heads/master
[branch "mirror"]
remote = github
merge = refs/heads/master
[push]
default = tracking
这是“git remote show origin”的输出:
“推”和“拉”命令都能正常工作:
- “push”命令将本地分支中提交的编辑发送到“她的”远程分支
- “pull”命令将提交从远程分支带到“她的”本地分支
$ git ls-remote github
455063a9db09977535ac808af5729181b153f4c7 HEAD
455063a9db09977535ac808af5729181b153f4c7 refs/heads/master
$ cat .git/refs/heads/master
ca9e4399058a4998bd7c993f86d6740cfaec820b
$ cat .git/refs/heads/mirror
455063a9db09977535ac808af5729181b153f4c7
$ cat .git/refs/remotes/github/master
455063a9db09977535ac808af5729181b153f4c7
确切地说,“refs/remotes/github/master”和“refs/heads/master”并不相等。这就是出现“本地过期”消息的原因:
master pushes to master (local out of date)
这对我来说不是问题,我肯定知道“remotes/github/master”和本地“master”中的代码是不同的
然而,“remotes/github/master”和本地“mirror”中的代码是相同的。实际上,refs“refs/remotes/github/master”和“refs/heads/mirror”是相等的
这是一条让我心安的信息:
mirror pushes to master (up to date)
mirror pushes to master (up to date)
如何配置远程/github。。。或推送。默认。。。要获得此输出?[对我自己和OP来说,一些提醒:remote
origin
=GitLab,remotegithub
=github。从根本上说,使用git remote show
的主要问题是它会做出一些假设。这些假设是关于将来如何运行其他git命令-git fetch
和git push
,关于这些Git命令中涉及的第二个Git存储库将来将如何布局。显然,安:很难做出预测,特别是关于未来。]
让我在这里回答顶部编辑的问题:
这是一条让我心安的信息:
mirror pushes to master (up to date)
mirror pushes to master (up to date)
如何配置remote/github…或push.default…以获取此输出
有一件事值得一试:一次push。默认设置,upstream
,告诉Git默认情况下,Git push
应该做到这一点。如果这样做有效并且满足了您的要求,那么您已经做好了准备。但是请注意,不管Git在这里说什么,这都是谎言
基本问题是,mirror
不会推送到master
直到你输入一个git push
命令,它根本不会推送到任何东西;一旦你输入了这个命令,你就可以用这个git push
命令控制它的去向,这个命令可以完全覆盖任何声明git remote如何制作
您在推送git时的选择是:
- 不提供其他参数
在这种情况下,您的Git从当前上游选择远程。如果上游设置为
origin/..
,则远程为origin
。如果上游设置为github/..
,则远程为github
。看起来像是一个简单的字符串替换(通常是这样,尽管出于历史原因,它实际上是一个非常复杂的字符串替换,结果通常很简单:在斜杠之前取一部分)
此时,您的Git将继续处理这里列出的第二个案例
- 提供一个附加参数。此参数命名要连接到的另一个Git。它通常是远程(
origin
或github
),但此时您可以提供URL
- 提供两个或多个附加参数。这些参数中的第一个名称是远程(或URL)。其余的是refspec,定义如下
此时,您的Git连接到该远程,实际上运行Git ls remote
,查看它们有哪些分支。此列表非常重要,因为它与您提供的或未能提供的refspec一起使用,这取决于您的推送。默认设置,以及当您提供refspec时,您只能提供半个refspec
这是“半个参考规范”不管你做了什么或设置了什么,如果你在mirror
上运行git-push-github-mirror
,你的git会要求远程github
上的git进行设置……这取决于你是否有上游设置,如果没有,则取决于你的push.default
设置。细节以Git通常的神秘形式显示在中。不过,默认情况是对于“半参考规范”,名称mirror
表示mirror:mirror
如果您提供完整的refspec,例如,git push github mirror:asdf
,refspec的后半部分将确定git要求其git设置的分支名称。如果您提供了半个refspec,则您提供的一半通常会同时成为两个名称。默认值为push.default=simple
,您不能意外推送镜像
对于其他任何人的主控
,必须使用显式的完整refspec(然后由您决定是否正确)
如果您不提供refspec,您的Git将返回到push.default,并且只有五个设置。默认设置是simple
,让您的Git将您的分支集与其分支集进行比较(从Git ls remote
)。如果您的分支(如mirror
)在那里没有任何相应的分支,您的Git将不会要求其Git设置任何分支
假设您位于分支mirror
,该分支的上游设置为github/master
,并且您已将push.default
配置为上游
(使用git config p
I have these references:
refs/heads/master <some big ugly hash ID>