你能解释一下这个工作流程有什么问题吗?
$ git init --bare bare
Initialized empty Git repository in /work/fun/git_experiments/bare/
$ git clone bare alice
Cloning into alice...
done.
warning: You appear to have cloned an empty repository.
$ cd alice/
$ touch a
$ git add a
$ git commit -m "Added a"
[master (root-commit) 70d52d4] Added a
0 files changed, 0 insertions(+), 0 deletions(-)
create mode 100644 a
$ 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 '/work/fun/git_experiments/bare'
Run Code Online (Sandbox Code Playgroud)
是不是git push总是推送到我克隆的存储库?
Set*_*son 479
是的,问题是"裸"没有提交.如果您按顺序创建repos(bare,alice),这只是第一次提交的问题.尝试做:
git push --set-upstream origin master
Run Code Online (Sandbox Code Playgroud)
这只是第一次需要.之后它应该正常工作.
正如克里斯·约翰森指出的那样,如果你的push.default是自定义的,你就不会有这个问题.我喜欢上游/跟踪.
ser*_*rby 43
如果你:
git push origin master
Run Code Online (Sandbox Code Playgroud)
它将推向裸机库.
听起来你的alice repo没有正确跟踪.
cat .git/config
Run Code Online (Sandbox Code Playgroud)
这将显示默认的远程和分支.
如果你
git push -u origin master
Run Code Online (Sandbox Code Playgroud)
您应该开始跟踪该远程和分支.我不确定这个选项是否总是在git中.
php*_*uru 29
这个相关问题的答案为我提供了解决方案......这只是一个愚蠢的错误:
记得先提交!
如果您尚未提交到本地仓库,则无需推送,但您收到的Git错误消息对您没有多大帮助.
ebn*_*ter 17
git push --all
Run Code Online (Sandbox Code Playgroud)
是将所有内容推送到新裸存储库的规范方法.
另一种做同样事情的方法是创建一个新的非裸存储库,然后使用它进行裸克隆
git clone --bare
Run Code Online (Sandbox Code Playgroud)
然后用
git remote add origin <new-remote-repo>
Run Code Online (Sandbox Code Playgroud)
在原始(非裸)存储库中.
在您的alice存储库中尝试此操作(在推送之前):
git config push.default tracking
Run Code Online (Sandbox Code Playgroud)
或者,将其配置为您的用户的默认设置git config --global ….
git push默认情况下,origin存储库(通常是您从中克隆当前存储库的存储库),但它不默认推送当前分支 - 它默认只推送存储在源存储库和目标存储库中的分支.
该push.default配置变量(见的git-配置(1) )控制什么git push时候(存储库名称后,即东西)没有给出任何"的Refspec"参数将推动.默认值给出了上述行为.
以下是可能的值push.default:
nothing
这会强制您提供"refspec".
matching(默认值)
这将推送源存储库和目标存储库中存在的所有分支.
这完全独立于当前检出的分支.
upstream或者tracking
(两个值的含义相同.后者被弃用以避免与"远程跟踪"分支混淆.前者在1.7.4.2中引入,因此如果使用Git 1.7.3.1则必须使用后者. )
这些将当前分支推送到由其"上游"配置指定的分支.
current
这会将当前分支推送到目标存储库中的同名分支.
这两个最后两个对于常见情况最终是相同的(例如,使用origin/master作为其上游的本地主服务器),但是当本地分支与其"上游"分支具有不同的名称时它们是不同的:
git checkout master
# hack, commit, hack, commit
# bug report comes in, we want a fix on master without the above commits
git checkout -b quickfix origin/master # "upstream" is master on origin
# fix, commit
git push
Run Code Online (Sandbox Code Playgroud)
随着push.default等于upstream(或tracking),推送会去origin的主分支.当它等于current,推会去origin的的quickfix分支.
一旦建立,该matching设置将更新场景中bare的主人.要建立它,你可以使用git push origin master一次.
但是,upstream设置(或者可能current)似乎可以更好地匹配您期望发生的事情,因此您可能想要尝试:
# try it once (in Git 1.7.2 and later)
git -c push.default=upstream push
# configure it for only this repository
git config push.default upstream
# configure it for all repositories that do not override it themselves
git config --global push.default upstream
Run Code Online (Sandbox Code Playgroud)
(同样,如果您在1.7.4.2之前仍在使用Git,则需要使用tracking而不是upstream).
| 归档时间: |
|
| 查看次数: |
178681 次 |
| 最近记录: |