15

我已经安装了 gitolite(现在在本地进行实验),它似乎可以工作,除了新的存储库在 git 克隆后默认不跟踪远程。如果我没记错的话,当我从 github.com 克隆一个存储库时,它已经能够推送和拉取。

这是我尝试过的:

$ git clone git@localhost:sandbox
Cloning into sandbox...
warning: You appear to have cloned an empty repository.
$ echo "A" > README
$ git add README
$ git commit README -m 'test'
$ git push
No refs in common and none specified; doing nothing.
Perhaps you should specify a branch such as 'master'.
fatal: The remote end hung up unexpectedly
error: failed to push some refs to 'git@localhost:sandbox'

当我尝试明确推送时,一切正常:

$ git push origin master
Counting objects: 6, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (6/6), 426 bytes, done.
Total 6 (delta 0), reused 0 (delta 0)
To git@localhost:sandbox
 * [new branch]      master -> master

真的需要这个额外的步骤吗?可以默认设置吗?在github上,不是吗?

谢谢

4

2 回答 2

25

第一个 git push 总是需要指定你想要推送的分支。

git push -u origin master

然后可以按照您的预期从同一分支完成下一次推送:

git push

git push手册页

特殊的 refspec :(或+:允许非快进更新)指示 git 推送“匹配”分支:对于本地端存在的每个分支,如果远程端已经存在同名分支,则更新远程端边。
如果没有找到明确的 refspec,这是默认的操作模式

由于您克隆了一个空存储库,因此第一次推送没有找到任何匹配的分支(上游 repo ' origin' 上没有)

注意:参见“什么是结果git push origin ”:

git push 的默认策略将随着 git 2.0(或者可能是 git1.9)而改变

引入了一种新的推送模式“ simple”,它是“ current”和“ upstream”的交叉。
" git push" 没有任何 refspec 只会将当前分支推送到远程存储库中的同名分支,仅当它设置为跟踪那里的同名分支时。计划是在未配置
时将此模式设为新的默认值。push.default

所以在 中git push -u origin master-u( --set-upstream-to) 在这里很重要(不仅仅是将同名的分支推送到远程 ' origin',而是一个远程跟踪分支。

于 2011-07-01T12:01:49.017 回答
0

您可以使用git branch --set-upstream命令,例如:
git branch --set-upstream develop origin/develop

于 2012-05-12T20:31:59.297 回答