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

时间:2010-04-15 05:01:16

标签: 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

我当然首先做了一个备份,然后尝试了。它似乎工作正常。然后我做了一个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并查看存储库,我的最新提交无处可寻。 :: scratch head ::所以我再次推动:

Everything up-to-date
嗯......看起来不像。我之前从未遇到过这个问题,这可能是github的问题吗?或者我的git项目搞砸了什么?

修改

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

git push origin master

它推得很好。

8 个答案:

答案 0 :(得分:175)

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

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

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

答案 1 :(得分:3)

让我们专注于它正在抱怨的内容:

  

权限被拒绝错误:无法更新ref   '参/遥控器/来源/主'。

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

我认为我在创建分支时导致了这个问题,而我是root用户,然后尝试将该分支作为我的用户。

答案 2 :(得分:2)

在我的情况下,我在本地创建了具有root权限的文件,并尝试使用本地权限将代码推送到远程。所以我运行了这个命令

$find . -user root

找出所有文件的内容" root"作为所有者。然后我使用以下命令

将所有根目录下的文件的所有者更改为本地
$sudo chown parineethat `find . -user root`

然后我能够将我的代码从本地推送到远程。

答案 3 :(得分:0)

这将递归更改所有.git文件和目录(从root更改为1000),并为您提供在终端中所做的所有更改的完整列表。

  

sudo chown -Rc $ UID .git /

答案 4 :(得分:0)

我尝试修复Git的所有权,但仍然无法正常工作。

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

然后,我再次签出相同的分支名称,它可以正常工作。

TLDR;

我无法签出`staging / rc'。

因此,我使用staging进行结帐,而不是遥控器指向`staging / rc'。

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

它有效,我不知道为什么。

答案 5 :(得分:0)

你可以做一个简单的:

sudo chown -R <username> <folder>

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

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

答案 6 :(得分:0)

如前所述,这是因为组或用户设置不正确。

我想补充一下以下命令对隐藏文件夹不起作用的信息:

chown -R user:group *

如果你使用 * 那么它会失败,你必须设置文件夹的绝对路径,例如:

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

答案 7 :(得分:-13)

请先提供root帐户的权限,如下所示

chmod -R 777 foldername

之后运行commit命令