Git 错误: 无法附加到. Git/log/refs/Remotes/source/master: 权限被拒绝

我遇到了一个奇怪的问题,我似乎无法解决。事情是这样的:

我在 github 存储库中有一些我不想要的日志文件。我发现这个脚本可以像下面这样从 git 历史中完全删除文件:

    #!/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

当然,我先做了个备份,然后试了试。看起来效果不错。然后,我做了一个 git push-f 操作,得到了以下信息:

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

不过,一切似乎都很顺利,因为文件似乎已经从 GitHub 存储库中消失了,如果我再次尝试推动,我会得到同样的结果:

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

剪辑

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

谢谢!

EDIT

哦,有问题,我一整晚都在做这个项目然后就去做我的修改了:

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

所以我:

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

我再次尝试承诺,我得到:

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

所以我:

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

万岁。我跳转到 http://GitHub.com并检查存储库,而我的最新提交在哪里都找不到。* 抓头 * * 所以我又推了一把 * :

Everything up-to-date

看起来不像。我以前从没遇到过这个问题,这会是 github 的问题吗?还是我搞砸了我的 Git 项目?

剪辑

没关系,我做了一个简单的:

git push origin master

而且还挺顺利的。

112482 次浏览

这看起来像是您在本地以 root 身份运行 git,从而改变了跟踪 origin分支位置的一些文件的所有权。

修复文件所有权,应该就没问题了:

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

请首先给予权限从 root帐户如下

chmod -R 777 foldername

然后运行提交命令

在我的示例中,我在本地创建了具有 root 权限的文件,并试图将代码推到具有本地权限的远程。所以我运行了这个命令

$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`

然后我就可以把我的代码从本地推送到远程。

让我们专注于它到底在抱怨什么:

拒绝权限错误: 无法更新引用 参考/遥控器/原产地/主机。

在进行递归 mod/所有权更改之前,遍历该文件并修复任何不正确的权限。

我认为是我在作为 root 用户时创建了一个分支,然后试图以用户身份破坏该分支,从而导致了这个问题。

这会改变你所有的。递归地给出 git 文件和目录(从 root 到1000) ,并给出终端中所有更改的完整列表。

sudo chown -Rc $UID .git/

我已经尝试修复 Git 的所有权,但仍然不起作用。

但是,我设法通过创建一个不同名称的本地分支并删除它来修复它。

然后,我再次检查相同的分支名称,它工作。

极低密度辐射;

我不能退房’分期/rc’。

因此,我使用 staging结帐,而不是远程指向“ stage/rc”。

然后,我删除它并再次结帐。但是,这次我使用 staging/rc作为我的本地分支名称。

我也不知道为什么会有用。

你可以做一个简单的:

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

这更像是权限问题的通用解决方案,但我认为这应该有所帮助。

正如已经指出的,这是因为组或用户设置不正确。

我想添加下面的命令对隐藏文件夹不起作用的信息:

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/