git 两个本地仓库之间推送错误

git push error between two local respositories

我有一个包含目录的(主)文件夹 'prj' 并且 git init 在那里创建了一个回购并添加并提交了所有文件 git add *

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

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

remote: error: refusing to update checked out branch: refs/heads/master[K remote: error: By default, updating the current branch in a non-bare repository[K remote: error: is denied, because it will make the index and work tree inconsistent[K remote: error: with what you pushed, and will require 'git r.............

这是设置主项目 (prj) 和第二个项目 (prj2) 的正确方法吗?

如果因为主项目回购是非裸 git init..etc 而无法推送,那么应该如何推送到主回购?

还是其他设置更好?

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

换句话说,不是 init 创建两个存储库,init --bare 一个然后克隆它。

或者如果他们都需要一个工作副本(即不是裸机),那么只有当两个回购协议不在同一时间的同一分支中时,您才能使其工作。如果是,则意味着当 prj2 推送其更改时,prj1 的工作副本将变得无效(这基本上就是您收到该错误的原因)。

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

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

我了解到这可能是由于分支处于非裸露状态而发生的。如果有人向这个分支推送,它将覆盖已签出副本的现有状态。

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

git init --bare

另一种可能是使用分支

看看 Git Push error: refusing to update checked out branch 可能会有用,这对我当时很有帮助。

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

如果您不打算在 prj1 中工作并且它只是一个中央聚合点,那么最好按照其他人的指示设置一个裸存储库。