【问题标题】:Cannot open FETCH_HEAD after renaming a branch重命名分支后无法打开 FETCH_HEAD
【发布时间】:2017-08-22 19:30:22
【问题描述】:

重命名“master”分支(使用 Sourcetree)后,我无法再获取远程存储库中所做的更改。

我得到错误:

error: cannot open .git/FETCH_HEAD: Permission denied

当我打开这个文件时,我看到引用的分支仍然指向branch 'master'

查看远程存储库,我看到一个名为“master”的分支仍然存在,除了我合并上次更改的重命名分支。我认为某处有问题,重命名没有在远程存储库中正确复制。

我尝试手动编辑FETCH_HEAD(更改完整的 SHA 和指向的分支),但我仍然收到此错误。当然,我不能像以前那样重命名主分支,因为始终存在名为“master”的分支。

有没有办法解决这个问题?

【问题讨论】:

  • 此错误并非来自重命名分支,而是通常来自以其他用户身份(通常以sudo 的超级用户身份)运行各种操作。这会留下超级用户拥有的文件和/或目录,因此作为普通用户的您不再有权对它们进行任何操作。如果是这样,解决方法是将所有权更改回您自己。
  • 由于我是唯一用户,我想这个问题的发生是因为我更改了一些设置(实际上,我已经更新了用户名和电子邮件地址)。因此,文件目前被声明为由使用我的旧设置定义的用户拥有,我需要更改此所有权,对吧?
  • 改变你的配置(使用git config)并不重要。使用chmod 更改基础文件权限或使用chown 更改文件所有权;在某些 Linux 变体(尤其是 SELinux)上,您可以删除自己的各种权限,以至于没有人可以完成任何事情。 (我相信你也可以在 Windows 上使用 ACL 来做到这一点,但我不“做”Windows。)
  • 你觉得this thread能帮上忙吗?
  • 该线程是关于使用git filter-branch,这是关于将现有提交复制到新提交,并在此过程中更改提交中的一些数据。在我看来,您仍然将各种 Git 文件的 contents 与(Git 外部,不受 Git 控制)file Ownership 混为一谈,由你的操作系统,而不是 Git 本身。 Git 的作者和提交者名称只是存储在文件中的数据字符串,无论这些文件的操作系统级别所有权如何。 (无论如何,.git/FETCH_HEAD 首先不包含任何数据!)

标签: git github branch fetch atlassian-sourcetree


【解决方案1】:

事实上,这个问题似乎是(可能)由于各种因素的综合作用:

  1. 我实际上已经重命名了一个分支(但这似乎不是主要原因)
  2. 我还更新了用户名和电子邮件地址(这可以支持我作为其他用户执行了各种操作的分析)
  3. 某些分支无法获取肯定是因为known bug of SourceTree(突然停止跟踪某些远程分支)

由于使用chown命令似乎没有效果,我终于通过以下过程解决了我的问题:

  1. 使用命令rm -f .git/FETCH_HEAD 删除被拒绝的文件(如this answer 中所述)
  2. 使用命令git branch -u 重新连接未跟踪的分支(如this comment 中所述)

之后,我能够获取所有远程分支,现在,所有分支都与我的本地存储库正确同步。

【讨论】:

    猜你喜欢
    • 2015-05-18
    • 1970-01-01
    • 2022-08-09
    • 2017-02-25
    • 2012-07-08
    • 2011-08-19
    • 2015-11-29
    • 2021-12-22
    • 2013-12-05
    相关资源
    最近更新 更多