现在,git push docs,
如果没有任何
git push [<repository>]
参数的<refspec>
设置为 使用<src>
更新目的地的一些参考remote.<repository>.push
个配置变量,:<dst>
部分可以是 省略-这样的推送将更新<src>
通常会更新的引用 在命令行上没有任何<refspec>
。否则,将缺少:<dst>
表示更新与<src>
相同的引用。
我对此有疑问。
我了解的是:
它将参考remote.origin.push
的值并尝试解析refspec。
但是..such a push will update a ref that <src> normally updates without any <refspec> on the command line.Otherwise, missing :<dst> means to update the same ref as the <src>
是什么意思?
有人可以举一个remote.origin.push
的例子,然后解释一下(上面突出显示的git doc的这个子句)真正意味着什么吗?
编辑:我了解git push origin
的行为,但由于git doc希望通过以上段落告诉我们,因此我无法将其与以上内容联系起来。
答案 0 :(得分:1)
对于git push
,有很多默认值。让我们首先清楚地分离出各种语法。语法在感兴趣的部分略有缩略,如下所示:
git push [options] [repository [refspec ...]]
repository
参数通常是远程服务器的名称,例如origin
,但可以是URL。如果在命令行上未指定 repository
参数,则也不能指定 refspec
:选项以短划线开头,而< em>不是用短划线作为前缀,第一个单词(被有问题的系统上调用C编译程序的程序分解为argv
元素)是存储库,其他单词是refspec。但是,绝对可以在不提供refspec的情况下提供存储库。例如,git push
缺少两者,而git push origin
有存储库但缺少refspec。
我们感兴趣的情况是命令行上的refspec 不是。但是,它的作用与在命令行上使用refspec 时相同—只是可以设置Git看起来的位置以便查找一些refspec在配置中。
假设在命令行上指定的存储库为origin
,即您运行了git push origin
。如您所说,Git将检查您的配置以查看是否具有remote.origin.push
设置。首先,让我们进一步说:
git config --get remote.origin.push
打印字符串develop:benjamin_develop
。
这是同时包含<src>
和:<dst>
部分的refspec,因此Git将其视为develop:benjamin_develop
。
现在让我们说你跑步:
git config remote.origin.push develop
,即删除设置的:benjamin_develop
部分。然后,您再次运行git push origin
。现在隐含的refspec只是develop
:它缺少了:<dst>
部分。
您引用的段落非常混乱(使我感到困惑),但是经过实验(请参阅下面的评论),我们发现它的作用与以下内容相同:
git push origin develop
在命令行上,其作用与以下命令相同:
git push origin develop:develop
即:<dst>
部分与:<src>
部分相同,而不管当前的push.default
设置如何。
(我认为这里的文档可能会更清晰。根本的问题是,随着时间的推移,Git的行为已经增长并发生了很大变化。remote.<remote>.push
设置在较旧的Git版本中不存在,因此在某些时候,在添加文档时,必须有人在文档中添加一个段落以进行匹配。这时,文档可以作为一个整体进行重构,以消除冗余,但是没有人这样做。)