我有一个带有目录的(主)文件夹'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而无法推送,那么应该如何推送到主仓库呢?
或者是一个更好的设置?
答案 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可能会有用。