Git error: Unable to append to .git/logs/refs/remotes/origin/master: Permission denied
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
开发者_StackOverflow社区
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 git@github.com: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.
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)}" .
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.
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.
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.
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/
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.
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/
Please first give the permissions from root
account like below
chmod -R 777 foldername
after that run the commit command
精彩评论