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 中工作并且它只是一个中央聚合点,那么最好按照其他人的指示设置一个裸存储库。
我有一个包含目录的(主)文件夹 '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 中工作并且它只是一个中央聚合点,那么最好按照其他人的指示设置一个裸存储库。