两个本地存储库之间的git推送错误

时间:2015-05-15 14:25:38

标签: git version-control git-push

我有一个带有目录的(主)文件夹'prj',并且git init创建了一个repo,并使用git add *

添加并提交了所有文件

我创建了另一个目录'prj2',我有git init,然后做了git pull,将所有内容复制到'prj2'

现在当我对prj2 repo中的文件进行更改并提交时,然后执行git push到prj(main)它会出错:

  

remote:错误:拒绝更新签出的分支:   refs / heads / master [K remote:error:默认情况下,更新当前   分支在非裸存储库中[K remote:错误:被拒绝,因为它   会使索引和工作树不一致[K remote:error:with   你推了什么,并且需要'git r .............

这是设置主项目(prj)和第二个(prj2)的正确方法,我可以从中推送到主项目吗?

如果由于主项目仓库是非裸机git init..etc而无法推送,那么应该如何推送到主仓库呢?

或者是一个更好的设置?

3 个答案:

答案 0 :(得分:3)

更简单的方法是克隆主项目并将其配置为remote。事实上它本地不是问题

换句话说,而不是init两个repos,init --bare一个,然后克隆它。

或者如果它们都需要有工作副本(即不是裸),那么只有当两个repos不在同一个分支中时才能使它工作。如果它们是,那意味着当prj2推动其更改时prj1的工作副本将变为无效(这基本上就是为什么你会得到该错误)。

最后,如果你需要在同一个分支中,git是错误的工具,因为你更多地讨论镜像。在这种情况下,像rsync这样的东西会更好用

答案 1 :(得分:0)

如果你打算在两个repos中工作,那么我发现从prj1做一个prj2的git pull是最干净的解决方案,而不是试图将prj2推入prj1。如果prj1是从第三个(可能是远程的)存储库克隆的,那么如果你使用这个设置,你仍然可以像往常一样从prj1推送到第三个(远程)repo。

如果您不打算在prj1中工作并且它只是一个中心聚合点,那么设置一个裸存储库就像其他人指出的那样可能是最好的。

答案 2 :(得分:-1)

错误:拒绝更新签出的分支:refs / heads / master 是我遇到的第一个错误之一。

我读过这可能是因为分支处于非裸状态。如果有人推进这个分支,它将覆盖签出副本的现有状态。

如果我没记错的话,一般方法是使用裸存储库,这可以通过以下方式完成:

git init --bare

另一种可能性是使用分支

查看那时帮助我的Git Push error: refusing to update checked out branch可能会有用。