1

我在本地机器上有两个仓库,比如说local1local2. 所以我从local1

git push local2 sombranch

我得到了这个

remote: error: refusing to update checked out branch: refs/heads/5-0-stable
remote: error: By default, updating the current branch in a non-bare repository
remote: error: is denied, because it will make the index and work tree inconsistent
remote: error: with what you pushed, and will require 'git reset --hard' to match
remote: error: the work tree to HEAD.
remote: error: 
remote: error: You can set 'receive.denyCurrentBranch' configuration variable to
remote: error: 'ignore' or 'warn' in the remote repository to allow pushing into
remote: error: its current branch; however, this is not recommended unless you
remote: error: arranged to update its work tree to match what you pushed in some
remote: error: other way.

这两个 repo 的历史几乎完全相同,细微的差异不会产生冲突。我是被迫改变的receive.denyCurrentBranch吗?我真的不想通过这个命令将远程仓库变成裸仓库git config --bool core.bare true

4

1 回答 1

1

如果您不想让 local2 成为裸仓库,您有多种选择:

1) 设置receive.denyCurrentBranch。但我认为 git 错误消息非常清楚地解释了这会如何导致以后出现问题,所以最好避免它。

2) 在 local2 中查看不同的分支,然后从 local1 进行推送。仅当您尝试推送到在远程存储库中签出的分支时才会发生该错误,因此您可以通过在那里签出不同的分支来避免它(这也消除了错误中描述的工作树/HEAD 同步问题.)

3)也许是最直接的,来自local2,只需这样做:

git pull local1

由于git pull更新了 HEAD、索引和工作树的所有三个,因此没有像 with 那样的同步问题git push,它只改变 HEAD。

于 2013-06-19T13:47:03.243 回答