Git error: Unable to append to .git/logs/refs/remotes/origin/master: Permission denied

GitGithub

Git Problem Overview


I am having a strange issue that I can't seem to resolve. Here is what happend:

I had some log files in a github repository that I didn't want there. I found this script that removes files completely from git history like so:

    #!/bin/bash
set -o errexit
 
# Author: David Underhill
# Script to permanently delete files/folders from your git repository.  To use 
# it, cd to your repository's root and then run the script with a list of paths
# you want to delete, e.g., git-delete-history path1 path2
 
if [ $# -eq 0 ]; then
    exit 0are still
fi
 
# make sure we're at the root of git repo
if [ ! -d .git ]; then
    echo "Error: must run this script from the root of a git repository"
    exit 1
fi
 
# remove all paths passed as arguments from the history of the repo
files=$@
git filter-branch --index-filter "git rm -rf --cached --ignore-unmatch $files" HEAD
 
# remove the temporary history git-filter-branch otherwise leaves behind for a long time
rm -rf .git/refs/original/ && git reflog expire --all &&  git gc --aggressive --prune

I, of course, made a backup first and then tried it. It seemed to work fine. I then did a git push -f and was greeted with the following messages:

error: Unable to append to .git/logs/refs/remotes/origin/master: Permission denied
error: Cannot update the ref 'refs/remotes/origin/master'.

Everything seems to have pushed fine though, because the files seem to be gone from the GitHub repository, if I try and push again I get the same thing:

error: Unable to append to .git/logs/refs/remotes/origin/master: Permission denied
error: Cannot update the ref 'refs/remotes/origin/master'.
Everything up-to-date

EDIT

$ sudo chgrp {user} .git/logs/refs/remotes/origin/master
$ sudo chown {user} .git/logs/refs/remotes/origin/master
$ git push
Everything up-to-date

Thanks!

EDIT

Uh Oh. Problem. I've been working on this project all night and just went to commit my changes:

error: Unable to append to .git/logs/refs/heads/master: Permission denied
fatal: cannot update HEAD ref

So I:

sudo chown {user} .git/logs/refs/heads/master
sudo chgrp {user} .git/logs/refs/heads/master

I try the commit again and I get:

error: Unable to append to .git/logs/HEAD: Permission denied
fatal: cannot update HEAD ref

So I:

sudo chown {user} .git/logs/HEAD
sudo chgrp {user} .git/logs/HEAD

And then I try the commit again:

16 files changed, 499 insertions(+), 284 deletions(-)
create mode 100644 logs/DBerrors.xsl
delete mode 100644 logs/emptyPHPerrors.php
create mode 100644 logs/trimXMLerrors.php
rewrite public/codeCore/Classes/php/DatabaseConnection.php (77%)
create mode 100644 public/codeSite/php/init.php
$ git push
Counting objects: 49, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (27/27), done.
Writing objects: 100% (27/27), 7.72 KiB, done.
Total 27 (delta 15), reused 0 (delta 0)
To [email protected]:IAmCorbin/MooKit.git
59da24e..68b6397  master -> master

Hooray. I jump on http://GitHub.com and check out the repository, and my latest commit is no where to be found. ::scratch head:: So I push again:

Everything up-to-date

Umm...it doesn't look like it. I've never had this issue before, could this be a problem with github? or did I mess something up with my git project?

EDIT

Nevermind, I did a simple:

git push origin master

and it pushed fine.

Git Solutions


Solution 1 - Git

This looks like you ran git as root locally, thus changing ownership on some of the files tracking the location of the origin branch.

Fix the file ownership, and you should be fine:

# run this from the root of the git working tree
sudo chown -R "${USER:-$(id -un)}" .

Solution 2 - Git

Let's concentrate on what it's complaining about exactly:

> Permission denied error: Cannot update the ref > 'refs/remotes/origin/master'.

Before doing recursive mod/ownership changes, traverse your way to that file and fix any permissions that are incorrect.

I think I caused this issue by creating a branch while I was root and then trying to mess with that branch as my user.

Solution 3 - Git

In my case I created the files with root permission locally and tried to push the code to remote with local permissions. So I ran this command

$find . -user root

to find out what all files have "root" as owner. And then I changed owner for all the files that are under root to local using following command

$sudo chown parineethat `find . -user root`

Then I was able to push my code from local to remote.

Solution 4 - Git

This will change all your .git files and directories recursively (from root to 1000)and give you a full listing of all the changes made in the terminal.

> sudo chown -Rc $UID .git/

Solution 5 - Git

you can just do a simple :

sudo chown -R <username> <folder>

replace "username" with the user you want to give access to and the "folder" with the path of the folder relative to where you are executing this command from

This is more of a generic solution to permission issues, but I think this is what should help.

Solution 6 - Git

I've tried fixing the ownership for Git, but it still doesn't work.

But, I've managed to fix it by creating the local branch with a different name and delete it.

Then, I check out the very same branch name again and it works.

TLDR;

I can't checkout `staging/rc'.

So, I checkout using staging instead that the remote is pointing to `staging/rc'.

And, I delete it and checkout again. But, this time I use staging/rc as my local branch name.

It works and I've no idea why.

Solution 7 - Git

As already pointed out, it is because the group or user is set incorrectly.

I want to add the information that the following command does not work for hidden folders:

chown -R user:group *

If you use the * then it will fail, you have to set the absolute path of the folder instead, e.g.:

chown -R user:group /srv/www/vhost/project/

Solution 8 - Git

Please first give the permissions from root account like below

chmod -R 777 foldername

after that run the commit command

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionCorbin TarrantView Question on Stackoverflow
Solution 1 - GitCharles DuffyView Answer on Stackoverflow
Solution 2 - GitAndrew EView Answer on Stackoverflow
Solution 3 - GitParineethaView Answer on Stackoverflow
Solution 4 - GitDonald L WilsonView Answer on Stackoverflow
Solution 5 - GitTegbir SinghView Answer on Stackoverflow
Solution 6 - GitMorgan KohView Answer on Stackoverflow
Solution 7 - GitBlackView Answer on Stackoverflow
Solution 8 - GitViruView Answer on Stackoverflow