【问题标题】:Trying to git pull with error: cannot open .git/FETCH_HEAD: Permission denied尝试 git pull 时出现错误:无法打开 .git/FETCH_HEAD:权限被拒绝
【发布时间】:2012-10-23 03:30:59
【问题描述】:

请帮助我,我正在尝试在我的终端中运行它:

asgard@asgard-A7N8X2-0:~/CollegePortal$ git pull
error: cannot open .git/FETCH_HEAD: Permission denied

那我试试这个

asgard@asgard-A7N8X2-0:~/CollegePortal$ sudo git pull
Permission denied (publickey).
fatal: The remote end hung up unexpectedly

帮帮我,我不明白这个问题。

【问题讨论】:

  • 你的公钥添加到github账号了吗?
  • 您是否对尝试拉取的本地目录和文件具有写权限?此外,sudo 可能在这里根本没有帮助,因为它需要访问您的 ssh 密钥(不是 root 的)。
  • 我遇到了这个问题并通过授予我的用户对该文件夹的修改和完全访问权限来解决它 (Windows)

标签: git github pull


【解决方案1】:

似乎第一个不起作用,因为您的用户没有更改该目录的权限,第二个似乎是因为您的 root 用户没有正确的 SSH 密钥来访问该 git 存储库。

根据您要执行的操作,最好将存储库克隆到其他目录,或者 chown 当前目录为您的用户提供完全访问权限

【讨论】:

  • 我面临着类似的问题,我不确定是否可以授予我的www-data 用户更新.git 目录的权限。我在浏览器中使用 php over http 调用 shell 脚本。详情here
  • 这种情况经常发生在你不小心忘记你已经运行sudo su并且你在一个repo中作为root用户。在那个目录中一个简单的sudo chown -R <username> . 就很神奇!
  • @Ray 有答案!非常适合我。
  • 像魔术一样工作,但我的目录权限怎么变了?
  • 别忘了最后的点!
【解决方案2】:

检查您是否对.git/ 目录拥有足够的权限。你应该有写权限。您可以使用以下命令设置它们。

转到您的项目文件夹:

chown -R youruser:yourgroup .git/

【讨论】:

  • 这给了我chown: youruser: Invalid argument
  • 应该是chown -R youruser .git/
  • 我必须 chown .git/ 及其父文件夹才能工作
  • 这似乎是一个非常常见的问题.. 好的,如果您与不同的用户一起工作,并且您更改了其他用户的权限,这有点棘手。
  • @Kiran 不要做 777,它是公开写的
【解决方案3】:

如果你想给组权限,

sudo chmod g+w .git -R

最适合我。

对于 MacOS

sudo chmod -R g+w .git 

【讨论】:

    【解决方案4】:

    这是一个 UNIX 权限问题。不要使用sudo 克隆存储库。您没有与 root 相同的 ssh 密钥,而且您也不应该以 root 身份工作。尝试ls -la 查找文件的权限并使用chmod(或sudo chown)修复它们。希望对您有所帮助。

    【讨论】:

    • 正是这个!我遇到了这个问题,因为我必须 sudo clone 才能接受 XCode 的新许可协议。答案是接受协议,然后不使用 sudo 进行克隆。
    【解决方案5】:

    在我的情况下工作正常:

    rm -f .git/FETCH_HEAD
    
    git branch -u
    

    【讨论】:

    • this particular case 也对我有用。
    • 对我来说,这也是解决方案。感谢您提供此解决方案。
    【解决方案6】:

    这样试试,

    第 1 步:首先检查您是谁?它将返回当前用户名,例如 ubuntu

    $ whoami 
    

    第 2 步:然后为您当前的用户设置权限,在这种情况下,ubuntu by

    sudo chown -R ubuntu .git/
    

    【讨论】:

    • 这适用于我在 Amazon lightail ubuntu 上运行话语安装时
    【解决方案7】:

    此问题的答案确保 .git/FETCH_HEAD 具有写入权限,您将一切就绪。

    我在 Windows 上遇到了这个问题,并通过授予写入权限得到了解决。

    在 unix 中,可以从项目存储库中运行chmod a+rw .git/FETCH_HEAD,之后它应该可以工作。

    【讨论】:

    • 如果.git 存在权限问题,则不能单独使用.git/FETCH_HEAD
    【解决方案8】:

    就我而言,我只有 .git/FETCH_HEAD 文件的读取权限。我必须执行“sudo chmod g+w .git/FETCH_HEAD”才能执行拉取请求。

    【讨论】:

    • 如果.git 存在权限问题,则不能单独使用.git/FETCH_HEAD
    • 我必须允许组 sudo chmod g+w .git/FETCH_HEAD 的 git 文件夹的写访问权限
    • sudo chmod g+w .git/FETCH_HEAD,完美解决。
    【解决方案9】:

    我在 Windows 上遇到了第一个问题(FETCH_HEAD 权限被拒绝)。

    我通过以管理员身份运行 Git Bash 来修复它(右键单击,以管理员身份运行)。

    【讨论】:

      【解决方案10】:

      如果您还没有将自己添加到拥有 .git/ 的群组中,那么您应该添加。

      sudo usermod -a -G $(stat -c '%G' .git) $USER
      sudo chmod g+u .git -R
      sudo chmod g+u .gitignore
      su - $USER
      

      这是做什么的:

      1. 找出哪个组拥有.git/,并将您的用户添加到该组。
      2. 确保组成员与.git/ 的所有者拥有相同的权限。
      3. .gitignore 重复此操作,您可能需要它
      4. 注销并重新登录以刷新您的群组成员文件权限

      如果您最近做了类似的事情(将自己添加到拥有 .git/ 的组中),那么您需要先注销并重新登录,然后才能在您的 git pull 期间写信给 .git/FETCH_HEAD .

      【讨论】:

        【解决方案11】:

        通过运行命令为当前用户设置权限

        $ sudo chown -R <username> .git/

        【讨论】:

          【解决方案12】:

          这将解决文件夹中的所有权限

          sudo chown -R $(whoami) ./
          

          【讨论】:

          • 这将始终有效,但它可能会影响其他用户的访问权限。请注意,以前的答案在此答案没有考虑到组访问权限。
          【解决方案13】:

          运行 Windows 7,当我遇到此问题时,是因为我隐藏了 .git 文件夹。权限很好,只是被隐藏了。显示文件夹解决了它。

          【讨论】:

          • 隐藏目录,谁来敲门。
          • 在 Windows 10 上对我来说同样的修复也同样有效。谢谢。
          • 这是 Windows 用户的答案 - 为我工作。
          【解决方案14】:

          只需转到您的 根文件夹 并运行以下命令:

          chmod a+rw .git/FETCH_HEAD
          

          【讨论】:

            【解决方案15】:

            这对我有用:

            1. 右键.git文件夹
            2. 点击获取信息
            3. 为您的用户设置权限
            4. 单击 Cog 图标,然后单击应用到随附的项目

            git 中没有更多的权限被拒绝错误。 ?

            【讨论】:

              【解决方案16】:

              使用这个命令,它对我有用。

              sudo chown -R $USER: .

              参考:https://techoverflow.net/2019/05/07/how-to-fix-git-error-cannot-open-git-fetch_head-permission-denied/

              【讨论】:

                【解决方案17】:

                查看.git目录的所有者和组(先到.git的父目录)ll .git,查看目录的组和所有者, 使用sudo usermod -a -G yourusername groupsofonwner 将您的用户添加到所有者组中,然后注销 => 登录,一切正常。

                所以在夏天

                1. 进入git的父目录

                  $cd your path
                  
                2. 查找.git 目录的组所有者

                  $ll .git     
                  
                3. 将您的用户添加到该组

                  $usermod -a -G yourusername ownergroupofgit
                  
                4. 注销并登录系统以使此更改生效。

                5. 好好享受吧;)

                【讨论】:

                  【解决方案18】:

                  当 .git 文件夹被隐藏并且其中的所有文件也被隐藏时遇到了这个问题。 只隐藏 .git 文件夹而不更新递归文件,它将起作用。

                  【讨论】:

                    【解决方案19】:

                    这个错误的原因可能是多重的,但在我的情况下,我用 root 更新了分支,然后当我尝试用普通用户更新它时,它给了我错误。

                    尝试两种解决方案,一种应该适合你

                    1- sudo chmod g+w .git -R
                    

                    如果它不起作用,请尝试下一个解决方案,希望它能解决您的问题

                    2 - rm -f .git/FETCH_HEAD
                    

                    【讨论】:

                      【解决方案20】:

                      当您没有为 .git 文件夹提供足够的权限时,会出现此问题。 为了解决这个问题-

                      1. 首先导航到您的工作目录。
                      2. 输入此命令-

                        sudo chmod a+rw .git -R

                      希望对您有所帮助..!!

                      【讨论】:

                        【解决方案21】:

                        错误:无法打开 .git/FETCH_HEAD:权限被拒绝

                        这对我有用:

                        1. 默认情况下 .git 文件夹是隐藏的。
                        2. 取消隐藏 .git 文件夹及其子文件夹和文件并尝试拉取请求。

                        【讨论】:

                          【解决方案22】:

                          我在使用 Windows 的 git 扩展时收到此消息。我的解决方法是简单地关闭 git 扩展,然后以管理员身份再次打开

                          【讨论】:

                            【解决方案23】:

                            就我而言,

                            sudo chmod ug+wx .git -R

                            此命令有效。

                            【讨论】:

                              【解决方案24】:

                              我遇到了完全相同的错误,但在我的情况下,问题是升级到 PHP 版本后重建 Apache 的结果。长话短说,我忘了安装 Apache 模块“suexec”。

                              它与组或所有权无关。这才花了我两天时间才弄明白,有人开枪打死我……

                              【讨论】:

                                【解决方案25】:

                                就我而言,我有一个双引导系统(Windows 10 和 Linux),项目文件夹位于 NTFS 磁盘上。事实证明,在另一个更新中,Windows 10 在其设置中自行启用了“快速启动”。 在我在 Windows 中取消选中后 - Linux 中的“错误:无法打开 .git/FETCH_HEAD:权限被拒绝”消失了。

                                【讨论】:

                                  【解决方案26】:

                                  对于 MacOS 用户(如果是 High Sierra 或更高版本),请使用:

                                  sudo chown -R $(whoami) $(brew --prefix)/*
                                  

                                  【讨论】:

                                    【解决方案27】:

                                    这里有很多答案,很多人建议做一个 chown。 对我来说,将用户更改为拥有文件夹的用户(在我的情况下为 tomcat)要容易得多,因为允许所有者编写: sudo su tomcat 而不是做一个 git pull 无需更改权限。我更喜欢这个,因为完成后我不必记得更改权限。

                                    要查找拥有该文件夹的用户,请执行 ls -la

                                    注意:不要授予对所服务文件夹的非 sudo 写入权限!

                                    【讨论】:

                                      【解决方案28】:

                                      我收到这个是因为我的盒子上有超过 1 个用户帐户。我以用户 A 的身份登录,并且位于用户 B 的目录中。用户 A 没有权限访问用户 B 的内容。一旦我意识到我不在文件系统中的位置,这个错误就有意义了。

                                      【讨论】:

                                        【解决方案29】:

                                        如果你在windows server中发现同样的问题,那么你需要以足够的权限运行命令行,比如管理员权限。

                                        【讨论】:

                                          【解决方案30】:

                                          当我在做bundle install 时,我得到了:

                                          Following files may not be writable, so sudo is needed:
                                            /Library/Ruby/Gems/2.6.0
                                            /Library/Ruby/Gems/2.6.0/bin
                                            /Library/Ruby/Gems/2.6.0/build_info
                                            /Library/Ruby/Gems/2.6.0/bundler
                                            /Library/Ruby/Gems/2.6.0/cache
                                            /Library/Ruby/Gems/2.6.0/doc
                                            /Library/Ruby/Gems/2.6.0/extensions
                                            /Library/Ruby/Gems/2.6.0/gems
                                            /Library/Ruby/Gems/2.6.0/specifications
                                          Fetching gem metadata from https://rubygems.org/.........
                                          error: cannot open .git/FETCH_HEAD: Permission denied
                                          

                                          我已经按照here 的步骤更新了我的bash_profile 以添加rbenv shim。

                                          export PATH="$HOME/.rbenv/bin:$PATH"
                                          eval "$(rbenv init -)"
                                          

                                          但由于某些未知原因,我将它们注释掉了。一旦我取消注释,我就可以成功运行bundle install

                                          【讨论】:

                                            猜你喜欢
                                            • 2015-11-29
                                            • 2016-11-15
                                            • 1970-01-01
                                            • 2012-12-18
                                            • 1970-01-01
                                            • 2015-03-25
                                            • 1970-01-01
                                            • 2020-12-30
                                            相关资源
                                            最近更新 更多