我相信一个队友拥有一个名为Fix/my-fix
的功能分支,然后将其重命名为fix/my-fix
,更改了大小写,并将其推送到我们的中央仓库中。
现在,每次执行git pull
时,我都会看到
error: cannot lock ref 'refs/remotes/origin/fix/my-fix': is at addd9e22effc39t86eca875a1db74f4cc2d09747 but expected cec2dce30eb3a5tf370c3d3b39540f9d2e347020
! cec2dce30..addd9e22e fix/my-fix -> origin/fix/my-fix (unable to update local ref)
如果我执行git remote prune origin
或git fetch --all --prune
,它可以解决此问题,因此我可以一次成功拉出,但是第二次我再次拉出错误。因此,本质上我必须在每次拉动之前prune
。
有什么办法可以在本地解决此问题,而无需从中央git存储库中删除其功能分支?我根本不在乎他的分支,因此可以接受的解决方法是告诉git以某种方式永久忽略它。我只需要能够始终如一地pull
,而不必prune
。
我也尝试过
git update-ref -d refs/remotes/origin/fix/my-fix
和
git gc --prune=now
那些同样只是暂时解决了问题。
我已经阅读了this article中区分大小写的文件系统的背景。
答案 0 :(得分:1)
根据您的描述,分支的大写拼写版本不应该返回(因此一次性git fetch -p
或git remote prune
应该是永久解决方案)。但是,如果它可以运行一次,则可以将其作为Mac上该存储库的 default 操作启用。
git config fetch.prune true
或Mac上存储库 1 的全部:
git config --global fetch.prune true
这等效于使所有git fetch
命令成为git fetch -p
命令。
(没有特别好的理由 not 将fetch.prune
设置为true
来运行。我自己这样做:我以这种方式设置了全局配置。)>
1 从技术上讲,这将是所有存储库除以外的任何fetch.prune=false
在本地覆盖的存储库。通常,有一些特定且重要的例外情况,您用git config --global
设置的内容会被您用git config
设置的内容覆盖,因为Git的作用是:
-c key=value
自变量。您在此处设置的所有已设置内容现在都将被命令行设置覆盖。例如,在进行咨询工作时,这特别有用:您可以将姓名和电子邮件地址设置为个人设置,然后针对要进行咨询工作的每个存储库,将姓名和电子邮件地址设置为该存储库需要执行的任何工作。
答案 1 :(得分:1)
懒惰>>这里是正确的。假设服务器现在只有一种情况:
git clone
如果您不想将所有内容推送到服务器,则可以使用git init --bare
推送到本地裸存储库。