我已经安装了gitolite(现在在本地进行实验)并且似乎有效,除了新的存储库在git clone之后没有默认跟踪远程。如果我没记错的话,当我从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上,不是吗?
谢谢
答案 0 :(得分:23)
第一个git push始终需要指定要推送的分支。
git push -u origin master
然后可以按照您的预期从同一分支完成下一次推送:
git push
特殊refspec
:
(或+:
允许非快进更新)指示git推送“匹配”分支:对于本地端存在的每个分支,远程端是如果远程端已存在同名分支,则更新 如果未找到明确的refspec,则这是默认操作模式。
由于你克隆了一个空的存储库,第一次推送没有找到任何匹配的分支(上游repo'origin
'上没有)
注意:请参阅“What is the result of 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
”,但它是一个远程跟踪分支。
答案 1 :(得分:0)
您可以使用git branch --set-upstream
命令,例如:
git branch --set-upstream develop origin/develop