git - git remote 被拒绝 - 本地存储库
问题描述
如果我的 directory1 包含一系列文件并且受 git 控制,那么我运行 ..
git clone -l $HOME/directory1 directory2
我现在在我的 cwd 中有一个 directory1 的副本。
如果我然后在 directory2 中编辑一个文件,将它添加到暂存并提交它,我无法将它推送到 directory1,因为我收到错误..
remote: error: refusing to update checked out branch: refs/heads/master
我不明白这一点,因为远程分支(directory1)是最新的,并且在将其克隆到 directory2 和尝试将其推回 directory1 之间我没有对其进行更改。
编辑:如果我git status
在 directory2 中运行,它会显示“您的分支比 origin/master 早 1 个提交”。
我还是不明白。
解决方案
您看到的错误是因为存储库中包含directory1
当前签出分支的工作副本。master
此时,您有两个选择:
- 将 repo
directory1
转换为裸存储库(即没有工作副本的存储库) - 通过将选项设置为:告诉 Git 在
directory1
您推送时更新工作副本:directory2
receive.denyCurrentBranch
updateInstead
cd directory1 git config receive.denyCurrentBranch updateInstead
您可以在文档中阅读有关此选项的更多信息:
如果设置为
true
orrefuse
,git-receive-pack
将拒绝对非裸存储库的当前签出分支进行 ref 更新。这种推送具有潜在危险,因为它会使 HEAD 与索引和工作树不同步。
refuse
是默认值,因此推送时会出错。关于updateInstead
价值:
另一个选项是
updateInstead
如果推入当前分支将更新工作树。
如果您的目标是保持同步directory1
,directory2
我会说这是更可取的选择。但是,请记住:
默认情况下,
updateInstead
如果工作树或索引与 HEAD 有任何差异,将拒绝推送。
这意味着如果您有未提交的更改directory1
,则推送directory2
将失败,因为它将覆盖索引和工作副本中的任何内容。
推荐阅读
- python - 除了循环之外,估算此列的有效方法是什么?
- angular - Angular 编译器需要 TypeScript >=3.4.0 和 <3.5.0 但找到的是 3.5.3
- wordpress - 我无法登录用户
- python - 基于密度阈值的聚类点
- c - 有没有办法将多个值作为 C 中单个定义的宏值传递给宏函数?
- julia - 将数组的单个元素写入文件
- groovy - 在常规中,检查数组中是否至少一个元素不为空的最佳方法是什么?
- haskell - 在决定一棵树是否完整时,“方程有不同数量的参数”
- zeplin - 如何修复 Zeplin 中的间距功能”它显示:“NaNpx”而不是精确的 px 值
- json - JMeter 脚本到 Postman 的转换