Git错误:无法附加到.git/logs/refs/remotes/origin/master:权限被拒绝

Cor*_*ant 76 git github

我有一个奇怪的问题,我似乎无法解决.这是发生的事情:

我在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
Run Code Online (Sandbox Code Playgroud)

当然,我首先做了备份,然后尝试了.它似乎工作正常.然后我做了一个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'.
Run Code Online (Sandbox Code Playgroud)

似乎所有东西都推得很好,因为文件似乎从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
Run Code Online (Sandbox Code Playgroud)

编辑

$ sudo chgrp {user} .git/logs/refs/remotes/origin/master
$ sudo chown {user} .git/logs/refs/remotes/origin/master
$ git push
Everything up-to-date
Run Code Online (Sandbox Code Playgroud)

谢谢!

编辑

哦,哦.问题.我整晚都在做这个项目,只是去做我的改变:

error: Unable to append to .git/logs/refs/heads/master: Permission denied
fatal: cannot update HEAD ref
Run Code Online (Sandbox Code Playgroud)

所以我:

sudo chown {user} .git/logs/refs/heads/master
sudo chgrp {user} .git/logs/refs/heads/master
Run Code Online (Sandbox Code Playgroud)

我再次尝试提交,我得到:

error: Unable to append to .git/logs/HEAD: Permission denied
fatal: cannot update HEAD ref
Run Code Online (Sandbox Code Playgroud)

所以我:

sudo chown {user} .git/logs/HEAD
sudo chgrp {user} .git/logs/HEAD
Run Code Online (Sandbox Code Playgroud)

然后我再次尝试提交:

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
Run Code Online (Sandbox Code Playgroud)

万岁.我跳上http://GitHub.com并查看存储库,我的最新提交无处可寻.:: scratch head ::所以我再次推动:

Everything up-to-date
Run Code Online (Sandbox Code Playgroud)

嗯......看起来不像.我之前从未遇到过这个问题,这可能是github的问题吗?还是我搞砸了我的git项目?

编辑

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

git push origin master
Run Code Online (Sandbox Code Playgroud)

它推得很好.

Cha*_*ffy 190

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

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

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

  • @ Mr.Stranger,只有你有一个理智的IFS值和用户名(带有空格的用户名可以发生,例如在cygwin上).更安全引用:`sudo chown -R"$ USER".`,而不是假设理智.:) (3认同)
  • 上面的语法是[参数扩展](http://wiki.bash-hackers.org/syntax/pe);`"${var:-default}"` 扩展为变量 `"$var"` 的值,*除非*该值为空或未设置,在这种情况下它将解析为 `default`。因此,我们要么扩展为“$USER”,要么扩展为运行“id -un”生成的输出。 (2认同)

小智 6

你可以做一个简单的:

sudo chown -R <username> <folder>
Run Code Online (Sandbox Code Playgroud)

将“用户名”替换为您想要授予访问权限的用户,将“文件夹”替换为相对于您执行此命令的位置的文件夹路径

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


And*_*w E 5

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

权限被拒绝错误:无法更新引用“refs/remotes/origin/master”。

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

我想我是通过在我是 root 时创建一个分支然后试图以我的用户身份弄乱该分支而导致这个问题的。

  • 修复除预期拥有整个源代码树的用户之外的任何人拥有的文件真的是一种改进吗? (3认同)