【发布时间】: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