git push origin master:refs / heads / master这是做什么的

时间:2011-09-21 21:22:45

标签: git gitolite

当我在我的gitolite存储库上创建一个新的repo时,我总是必须输入以下命令才能开始将代码推送到服务器。

git push origin master:refs/heads/master

它做了什么?

我的猜测是,这与头部参考不确定有关。有人可以向我解释一下吗?

4 个答案:

答案 0 :(得分:28)

此命令有三个部分:

git push

这会调用push命令

origin

这会命名您要推送的遥控器。这是存储在.git / config中的一个名为遥控器(您可以使用git remote列出这些遥控器),一个URL或令牌.,这意味着当前存储库。

master:refs/heads/master

这称为“refspec”,您可以在git push的手册页中阅读它。但总的来说,它由两部分组成,用冒号分隔。第一部分是本地分支的名称,第二部分是远程存储库上的分支的名称(在本例中为origin)。这个特殊的refspec可以缩短为master:master

一般来说,人们可以进一步缩短refspec。仅指定master作为refspec相当于在遥控器上使用相同的名称,因此mastermaster:master相同。

答案 1 :(得分:5)

master:refs/heads/master是refspec。

refspecs的格式为+<src>:<dst>

所以这里master是你本地仓库的ref,你正在推动远程(原点)上的refs/heads/master refspec。 master实际上是refs/heads/master的缩写。

事实上,你可以做git push origin master,这样就可以将你的本地主人推送到远程主人。只有当你想要推送到另一个ref时才需要明确指定目标引用。

同样只是git push也有默认行为,在第一次推送并在远程创建分支(主)之前可能不会出现这种情况。所以看起来你需要做你提到的命令。请参阅手册

答案 2 :(得分:3)

git push的默认行为,大概是你所描述的“将代码推送到服务器”,只是推送在你推送的遥控器上按名称具有匹配分支的本地分支至。当你创建一个新的repo时,它没有分支,所以一个简单的git push将不会推送任何东西。您必须先按名称明确推送分支。此后,默认行为将按预期工作。

P.S。实际上,你只需要git push origin master。它的作用是将您的本地主人推送到gitolite repo作为主人,因为您没有指定其他名称。如果您说git push origin master:foo,那么您在本地称为“master”的分支将在gitolite上被称为“foo”。

P.P.S。您可以在“无”,“匹配”(默认),“跟踪”/“上游”和“当前”之间切换默认推送行为。请参阅git-config man page上的“push.default”设置。

答案 3 :(得分:1)

它为您设置跟踪。您可以使用此简写:

git push origin master

冒号后面的部分是远程仓库上分支的名称。如果省略它,git假定您需要相同的名称。

希望这有帮助。