Error git fetch head

Git Cannot open .git/FETCH_HEAD: Permission denied Solution

Git needs write permissions on the files in a directory called .git/ inside your project folder. If the Git command line does not have access to this folder, you’ll encounter an error like “Cannot open .git/FETCH_HEAD: Permission denied” when you try to pull a file.

In this guide, we’re going to discuss what this error means and its cause. We’ll walk through an example so you can learn how to fix it in your program.

Cannot open .git/FETCH_HEAD: Permission denied

Git repositories contain a special folder called .git/. You may not have seen this folder because it is hidden. The hidden status of this folder is denoted by the full stop (“.”) that comes at the start of the folder name.

Find Your Bootcamp Match

  • Career Karma matches you with top tech bootcamps
  • Access exclusive scholarships and prep courses

Select your interest
First name

Last name


Phone number

By continuing you agree to our Terms of Service and Privacy Policy , and you consent to receive offers and opportunities from Career Karma by telephone, text message, and email.

This folder contains various pieces of metadata about a repository. It tracks your project-specific configuration options, the references in your project, your current HEAD, among other crucial pieces of information about your repository.

Git needs read and write access to this folder. This is because its contents will change as you run commands like git config and git pull.

An Example Scenario

We’re going to clone a repository called ck-git from GitHub. This repository contains a file called To clone this repository, we can use the git clone command :

The contents of our file are currently:

We want to change this file to contain a more descriptive We’re going to open this file in a text editor and change its contents to the following:

A repository with demo files for Career Karma’s Git tutorials.

That’s better. Our file more accurately describes the purpose of our Git repository. Now, let’s add this change to the staging area so we can create a commit:

Git knows that we want to add into our next commit. To make our changes show up in our remote repository, we have to add them to a commit :

Our commit is now ready to be pushed to our remote repository. Before we push our code, we’re going to pull the remote version of our repository. This will let us make sure that we are up to date with any changes that have been made since we cloned the repository:

This command returns:

This error tells us that Git cannot access one of its configuration files, FETCH_HEAD.

«Career Karma entered my life when I needed it most and quickly helped me match with a bootcamp. Two months after graduating, I found my dream job that aligned with my values and goals in life!»

Venus, Software Engineer at Rockbot

Find Your Bootcamp Match

The Solution

We cloned the ck-git repository using the “sudo” command . This means our repository was cloned as the root user. Because the root user cloned the repository, the files in the repository are owned by the root user.

We can see this by running the ls -la command:

All of the files in our folder are owned by “root”, which is part of the “staff” account. When we try to pull our remote repository without using “sudo”, an error is returned. This is because our standard user account does not have permissions to modify the files in the folder.

To fix this issue, we are going to change the ownership of the files in our folder. We can do this using the chown command:

This command changes the ownership details of all the files and folders in our repository, including the .git/ folder. We are now the owner of the directory and have full access to the project folder. We should now be able to pull our code:

This command executes successfully and returns:

We now know that no changes have been made to our remote repository since we last pulled our code. We last pulled code when we created the repository.


The Git “Cannot open .git/FETCH_HEAD: Permission denied” error occurs when you try to pull code from a remote repository when the .git/ directory in your project folder is inaccessible to your current user.

To solve this error, make sure that your current user has read-write privileges to the Git repository with which you are working.

Читайте также:  Error installing android platform

About us: Career Karma is a platform designed to help job seekers find, research, and connect with job training programs to advance their careers. Learn about the CK publication.


error: cannot open .git/FETCH_HEAD: Permission denied #43471


Followed all the pre-bug-report instructions, made sure I have the latest command line tools. I even tried removing linode (the tap listed here), but that didn’t affect the problem.

The text was updated successfully, but these errors were encountered:

By the look of # symbol at the beginning, it seems you are running as root . It’s not advised to run Homebrew as root user or using sudo .

Anyway, you could check for the permissions on the file,

On git update , .git/FETCH_HEAD is updated with the latest commit, which is failing in your case.

On 1 Sep 2015, at 10:50, tzudot wrote:

By the look of the # symbol at the beginning, it seems you are
running as root . It’s not advised to run Homebrew as root user or
using sudo .

I am not; that’s just my prompt symbol for the normal user.

Anyway, you could check for the permissions on the file,

ls -l /usr/local/Library/Taps/linode/cli/.git/FETCH_HEAD

ls: /usr/local/Library/Taps/linode/cli/.git/FETCH_HEAD: No such file or

ls -l /usr/local/.git/FETCH_HEAD

-rw-r—r—@ 1 paul.hoffman admin 98 Sep 1 08:10

ls -l /usr/local/Library/Taps/linode/

total 0
drwxr-xr-x@ 4 paul.hoffman admin 136 Jul 2 22:58 homebrew-cli

ls -l /usr/local/Library/Taps/linode/cli/

ls: /usr/local/Library/Taps/linode/cli/: No such file or directory

On git update , .git/FETCH_HEAD is updated with the latest commit,
which is failing your case.

Yes, that seems correct.

Does this indicate that the «linode» package is broken, in that it has a
directory called «homebrew-cli» but not one called «cli»?

You’re right, the sub-directory within linode is homebrew-cli .

Check for FETCH_HEAD within .git there.

On 1 Sep 2015, at 11:08, tzudot wrote:

You’re right, the sub-directory within linode is home-brew-cli .

Check for FETCH_HEAD within .git there.

In that, I note that the owner is «paul» instead of «paul.hoffman»; the
latter should be the owner.

It seems that «brew uninstall —force» doesn’t give messages when it

Once I forcefully removed /usr/local/Library/Taps/linode with «rm -f»,
the error in this thread disappeared.

Should I close this bug and start a new one for brew uninstall —force?

That’s weird. Just to be sure, run the command to reapply correct permissions within Homebrew directory,

Note — As per Homebrew recommended process in check for common issues.

Basically, make it writable by the current user / group.

You may close this issue, if it has been resolved.

Interesting. I just found this thread because I was having the same problem. Turned out two files in one of the /usr/local/Library/Taps/homebrew .git directories was owned by root. I belive that goes back to accidentally running «sudo brew update» one time. (Hard to get Macports usage out of one’s head.)
To find such files, assuming that USERNAME is the username that should be the owner of your Homebrew files (e.g. your own username):

find /usr/local/Library ! -user USERNAME -ls

My problem was fixed only after executing

thanks to @tzudot and @georgiana-gligor — what is «$(whoami):admin» doing? specifically the :admin part?


Попытка git pull с ошибкой: невозможно открыть .git/FETCH_HEAD: разрешение отклонено

Помогите мне, пожалуйста, я пытаюсь запустить это в своем терминале:

Тогда я попробую этот

Помогите мне, я не понимаю эту проблему.

Вы добавили свой открытый ключ в учетную запись github? — madhead

Есть ли у вас разрешение на запись в локальный каталог и файлы, в которые вы пытаетесь потянуть? Также, наверное sudo здесь вообще не помогает, так как ему нужен доступ к вашим ключам ssh (не root). — Benjamin Bannier

У меня была эта проблема, и я решил ее, предоставив моему пользователю права на изменение и полный доступ к этой папке (Windows) — Frank

30 ответы

Похоже, что первый не работает, потому что у вашего пользователя нет прав на изменение этого каталога, а второй — потому что у вашего пользователя root нет правильных ключей SSH для доступа к этому репозиторию git.

В зависимости от того, что вы пытаетесь сделать, может быть лучше клонировать репозиторий в другой каталог или, может быть, chown текущий каталог, чтобы иметь полный доступ для вашего пользователя

Я столкнулся с подобной проблемой, и я не уверен, могу ли я дать свой www-data пользователю разрешение на обновление .git каталог. Я вызываю сценарий оболочки, используя php через http в браузере. Подробности здесь — KillABug

Это часто случается, когда вы случайно забываете, что бежали. sudo su и вы действуете как root в репо. Простой sudo chown -R . в этом каталоге работает волшебство! — луч

Читайте также:  Services error 1053 starting service

У @Ray есть ответ! Работал отлично для меня. — Drewkiimon

работает как по волшебству, но как изменилось разрешение моего каталога? — Ааюш Неупане

Не забудьте точку в конце! — Грег Гомес

Проверьте, достаточно ли у вас разрешений на .git/ каталог. У вас должны быть права на запись. Вы можете установить их с помощью следующей команды.

Перейдите в папку вашего проекта:

ответ дан 08 апр.

Это дает мне chown: youruser: Invalid argument — закданс

Должен быть chown -R youruser .git/ — бленд или сингл ориджин

Мне пришлось chown .git/ и его родительская папка для работы — Задубз

Это кажется очень распространенной проблемой. Хорошо, если вы работаете с другим пользователем и что-то от другого пользователя, вы изменили свои разрешения, это немного сложно. — Рене Хёле

@Kiran не делайте 777, это публичная запись — Джобин

Если вы хотите дать разрешение группе,

работал лучше всего для меня.

Это проблема разрешения UNIX. Не используй sudo для клонирования репозитория. У вас нет тех же ключей ssh, что и у root, и вы в любом случае не должны работать как root. Пытаться ls -la чтобы найти разрешения на файлы и использовать chmod (или sudo chown ), чтобы исправить их. Надеюсь, это поможет.

Именно это! Я столкнулся с этой проблемой, потому что мне нужно было сделать sudo clone чтобы принять новое лицензионное соглашение XCode. Ответ — принять соглашение, а затем клонировать без sudo. — Барнаби

В моем случае после этого все работает нормально:

ответ дан 03 мар ’20, в 17:03

Для меня это тоже было решением. Спасибо за этот вариант решения. — Франсиско Мария Калисто

Шаг 1: Сначала проверьте, кто вы? он вернет текущее имя пользователя, например Ubuntu

Шаг 2: Затем установите разрешение для вашего текущего пользователя, в этом случае Ubuntu by

ответ дан 15 мая ’18, 17:05

это работает для меня при установке дискурса на Amazon Lightsail ubuntu — Jide

Чтобы ответить на этот вопрос, убедитесь, что .git/FETCH_HEAD имеет права на запись, и все будет готово.

У меня была эта проблема в Windows, и она была решена путем предоставления разрешений на запись.

В unix можно запустить chmod a+rw .git/FETCH_HEAD из репозитория проекта, после чего он должен работать.

ответ дан 07 мар ’15, в 15:03

не работает с .git/FETCH_HEAD в одиночку, если проблема с разрешением включена .git . — Кер

В моем случае у меня был доступ только для чтения к файлу .git/FETCH_HEAD. Мне пришлось сделать «sudo chmod g+w .git/FETCH_HEAD», чтобы иметь возможность выполнить запрос на вытягивание.

ответ дан 11 мар ’14, в 18:03

не работает с .git/FETCH_HEAD в одиночку, если проблема с разрешением включена .git . — Кер

Мне пришлось разрешить запись в папку git для группы sudo chmod g+w .git/FETCH_HEAD — Уильям

sudo chmod g+w .git/FETCH_HEAD , идеальное решение. — Риши Кулшрештха

У меня была первая проблема (отказано в разрешении FETCH_HEAD) в Windows.

Я исправил это, запустив Git Bash от имени администратора (щелкните правой кнопкой мыши, запустите от имени администратора).

Создан 24 июля ’14, 16:07

Если вы не добавили себя в группу, которой принадлежит .git/ , то вы должны.

  1. выясняет, какая группа владеет .git/ и добавляет вашего пользователя в эту группу.
  2. гарантирует, что члены группы имеют те же разрешения, что и владелец, для .git/ .
  3. повторяет это для .gitignore , который вам, вероятно, понадобится
  4. выводит вас из системы и снова входит в нее, чтобы обновить права доступа к файлу членства в вашей группе.

Если вы совсем недавно сделали что-то подобное (добавили себя в группу, владеющую .git/ ), то вам нужно выйти и снова войти, прежде чем вы сможете писать в .git/FETCH_HEAD во время вашего git pull .

Создан 03 июля ’16, 02:07

Установите разрешение для вашего текущего пользователя, выполнив команду


«error: cannot open .git/FETCH_HEAD: Permission denied» when testing #277


I followed the instructions for installation on the main page (bash -c «$(wget -qO —»), but when I select the option to run the script with the settings chosen during install, I get the error «error: cannot open .git/FETCH_HEAD: Permission denied». I get the same error whenever I rerun from /opt/plexupdate/extras/ and have it test the settings chosen. I am choosing Yes to Plex Pass versions, No to auto-install, and Yes to everything else. I am running Ubuntu Server 20.04 LTS. I have tried giving the entire /opt/plexupdate/.git folder 774 permissions, but the installer then said I had modified plexupdate files and it reinstalled again. I still get the same error. Is this expected, or is there something else I need to do?

Читайте также:  Exception файл не найден python

The text was updated successfully, but these errors were encountered:

The most likely issue is that you either installed it with a different user than you’re trying to run it as, or there was an issue with sudo while installing. Can you please run the following and provide the output?

Sorry it took a while to get back to you — here is the output requested (note the plex user is the user I created when installing Ubuntu Server):

uid=1000(plex) gid=1000(plex) groups=1000(plex),4(adm),24(cdrom),27(sudo),30(dip),44(video),46(plugdev),109(render,),116(lxd)
total 72
drwxr-xr-x 4 root root 4096 Jul 11 04:51 .
drwxr-xr-x 6 root root 4096 Jul 11 04:51 ..
drwxrwxr-x 8 root root 4096 Jul 11 06:25 .git
-rw-rw-r— 1 root root 18025 Jul 11 04:51 LICENSE
-rwxrwxr-x 1 root root 5321 Jul 11 04:51
drwxrwxr-x 2 root root 4096 Jul 11 04:51 extras
-rwxrwxr-x 1 root root 8068 Jul 11 04:51 plexupdate-core
-rwxrwxr-x 1 root root 17302 Jul 11 04:51

total 56
drwxrwxr-x 8 root root 4096 Jul 11 06:25 .
drwxr-xr-x 4 root root 4096 Jul 11 04:51 ..
-rwxrwxr-x 1 root root 98 Jul 20 06:25 FETCH_HEAD
-rwxrwxr-x 1 root root 23 Jul 11 04:51 HEAD
drwxrwxr-x 2 root root 4096 Jul 11 04:51 branches
-rwxrwxr-x 1 root root 261 Jul 11 04:51 config
-rwxrwxr-x 1 root root 73 Jul 11 04:51 description
drwxrwxr-x 2 root root 4096 Jul 11 04:51 hooks
-rwxrwxr-x 1 root root 576 Jul 11 06:25 index
drwxrwxr-x 2 root root 4096 Jul 11 04:51 info
drwxrwxr-x 3 root root 4096 Jul 11 04:51 logs
drwxrwxr-x 4 root root 4096 Jul 11 04:51 objects
-rwxrwxr-x 1 root root 346 Jul 11 04:51 packed-refs
drwxrwxr-x 5 root root 4096 Jul 11 04:51 refs

It looks like you were root at the time you installed it, hence the problem. You can either just run it as root (or using sudo), or if you’d prefer to run it as the plex user, just delete the /opt/plexupdate directory and install it again, making sure you’re logged in as plex when you do it. The installer may ask you for sudo permission but it will use it to set the permissions to the user you’re currently logged in as so it should work just fine. Let me know if that takes care of it for you.

Thanks! I believe I did originally install it under the plex user, but I went ahead and deleted the plexupdate directory, and the plexupdate.conf/plexupdate.cron.conf files under /etc, and the cron job under /etc/cron.daily. Then I made sure I was not running as root and re-ran the installer. It asked me for sudo credentials as you said, and I selected:

  1. The default /opt/plexupdate installation directory
  2. Y to PlexPass releases
  3. N to automatically installing latest releases when downloaded
  4. Y to setting up automatic updates for Plex

It is at number 4 where it tells me «WARNING: For security reasons, plexupdate needs to be installed as root in order to run automatically. In order to finish setting up automatic updates, we will change the ownership of ‘/opt/plexupdate’ to root:root.»

I select Y here, as otherwise the installer exits. I select N to writing to syslog, Y to sending emails, and then Y to run plexupdate with these settings now. When it runs with these settings, it throws the «error: cannot open .git/FETCH_HEAD: Permission denied» again.

Ah, ok. Yes, that’s unavoidable unfortunately. If you want to have plexupdate run automatically via cron it has to be installed as root, so the installer made that change for you. If you want it to run automatically every day, all you have to do is just run it as root (or use sudo) when you want to run it manually. It will automatically run every night and already have the permissions it needs.

If you want to just have it installed as the plex user, you can do that as well, you just can’t enable automatic updates that way.

Gotcha — thanks for the clarification! I just wanted to make sure there wasn’t a problem when I was seeing that error when it asked me to test the setup.

Oh, I didn’t realize that was during your initial setup. That part is a bug. If the installer ends up installing plexupdate as root it should run it as root if you answer Y to run with these settings now. I’ll reopen this for now and then close it once an update is pushed out. Sorry it took me a while to figure out what you meant.


Оцените статью