使用remote.repository.push解析git push origin

时间:2018-09-18 16:31:01

标签: git

现在,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希望通过以上段落告诉我们,因此我无法将其与以上内容联系起来。

1 个答案:

答案 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版本中不存在,因此在某些时候,在添加文档时,必须有人在文档中添加一个段落以进行匹配。这时,文档可以作为一个整体进行重构,以消除冗余,但是没有人这样做。)