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

cwdobuhd  于 2023-02-07  发布在  Git
关注(0)|答案(9)|浏览(330)

我有一个奇怪的问题,我似乎无法解决。以下是发生了什么:
我在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

谢谢!

    • 编辑**

啊哦。问题。我整晚都在做这个项目,刚去提交我的更改:

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

然后我再次尝试提交:

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并 checkout 了仓库,但我最近的提交却找不到。::scratch head::所以我又推了一次:

Everything up-to-date

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

    • 编辑**

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

git push origin master

而且推得很好。

svgewumm

svgewumm1#

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

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

j2qf4p5b2#

让我们集中注意它到底在抱怨什么:
权限被拒绝错误:无法更新引用“refs/remotes/origin/master”。
在进行递归mod/ownership更改之前,遍历该文件并修复任何不正确的权限。
我想我是在root身份下创建了一个分支,然后试图以我的用户身份处理该分支,从而导致了这个问题。

omqzjyyz

omqzjyyz3#

你可以做一个简单的

sudo chown -R <username> <folder>

将“username”替换为要给予其访问权限的用户,将“folder”替换为相对于执行此命令的文件夹的路径
这更像是权限问题的通用解决方案,但我认为这应该是有帮助的。

ipakzgxi

ipakzgxi4#

在我的例子中,我使用root权限在本地创建文件,并尝试将代码推送到具有本地权限的远程。

$find . -user root

找出所有文件的所有者都是“root”。然后我用下面的命令把所有在root下的文件的所有者改为本地

$sudo chown parineethat `find . -user root`

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

ybzsozfc

ybzsozfc5#

这将递归地更改所有的.git文件和目录(从根目录到1000),并给予在终端中所做的所有更改的完整列表。
搜索结果-Rc $UID .git/

d8tt03nd

d8tt03nd6#

我尝试过修复Git的所有权,但仍然不起作用。
但是,我已经设法修复了它,方法是用不同的名称创建本地分支并将其删除。
然后,我再次检查相同的分支名称,它工作。

TLDR;

我无法 checkout “staging/rc”。
因此,我使用staging进行 checkout ,而不是远程指向'staging/rc'。
然后,我删除它并再次 checkout 。但是,这一次我使用staging/rc作为我的本地分支名称。
它起作用了,我不知道为什么。

oipij1gg

oipij1gg7#

尝试停止所有git进程。
观看:

ps aux | grep git

杀灭:

kill git
w8ntj3qf

w8ntj3qf8#

正如已经指出的,这是因为组或用户设置不正确。
我想添加以下命令不适用于隐藏文件夹的信息:

chown -R user:group *

如果使用*,则会失败,您必须改为设置文件夹的绝对路径,例如:

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

wr98u20j9#

请先从root帐户给予权限,如下所示

chmod -R 777 foldername

之后运行commit命令

相关问题