117 votes

Erreur Git : Impossible d'ajouter un fichier à .git/logs/refs/remotes/origin/master : Permission refusée

J'ai un problème étrange que je n'arrive pas à résoudre. Voici ce qui s'est passé :

J'avais quelques fichiers log dans un dépôt github que je ne voulais pas y trouver. J'ai trouvé ce script qui supprime complètement les fichiers de l'historique git comme ceci :

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

Bien entendu, j'ai d'abord effectué une sauvegarde, puis j'ai essayé. Elle semblait fonctionner correctement. J'ai ensuite fait un git push -f et j'ai été accueilli par les messages suivants :

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

Tout semble avoir été poussé correctement, car les fichiers semblent avoir disparu du dépôt GitHub, si j'essaie de pousser à nouveau, j'obtiens la même chose :

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

Gracias.

EDIT

Oh Oh. Problème : je n'ai pas été en mesure d'obtenir des informations sur l'état de l'environnement. J'ai travaillé sur ce projet toute la nuit et je viens d'aller livrer mes modifications :

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

C'est ce que je fais :

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

J'essaie à nouveau d'effectuer la validation et j'obtiens :

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

C'est ce que je fais :

sudo chown {user} .git/logs/HEAD
sudo chgrp {user} .git/logs/HEAD

Puis j'essaie à nouveau d'effectuer l'engagement :

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

Hourra ! Je saute sur http://GitHub.com et je vérifie le dépôt, et mon dernier commit n'est nulle part. ::scratch head: : Donc je pousse à nouveau :

Everything up-to-date

Umm... ça n'en a pas l'air. Je n'ai jamais eu ce problème auparavant, est-ce que ça pourrait être un problème avec github ? ou est-ce que j'ai raté quelque chose avec mon projet git ?

EDIT

Je n'ai pas fait attention, j'ai fait simple :

git push origin master

et il a bien poussé.

284voto

Charles Duffy Points 34134

Il semble que vous ayez exécuté git en tant que Root localement, modifiant ainsi la propriété de certains des fichiers qui suivent l'emplacement du fichier origin branche.

Corrigez la propriété du fichier et tout devrait bien se passer :

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

6voto

Andrew E Points 129

Concentrons-nous sur ce dont il se plaint exactement :

Erreur de refus de permission : Impossible de mettre à jour la référence 'refs/remotes/origin/master'.

Avant de procéder à des changements récursifs de mode ou de propriété, parcourez votre chemin jusqu'à ce fichier et corrigez toutes les permissions incorrectes.

Je pense que j'ai provoqué ce problème en créant une branche alors que j'étais Root et en essayant ensuite de modifier cette branche en tant qu'utilisateur.

5voto

Tegbir Singh Points 11

Vous pouvez simplement faire un :

sudo chown -R <username> <folder>

remplacez "username" par l'utilisateur auquel vous voulez donner accès et "folder" par le chemin du dossier relatif à l'endroit d'où vous exécutez cette commande

Il s'agit davantage d'une solution générique aux problèmes d'autorisation, mais je pense que c'est ce qui devrait aider.

4voto

Parineetha Points 61

Dans mon cas, j'ai créé les fichiers avec la permission Root localement et j'ai essayé de pousser le code à distance avec les permissions locales. J'ai donc exécuté la commande suivante

$find . -user root

pour savoir quels sont les fichiers dont le propriétaire est "Root". Ensuite, j'ai changé le propriétaire de tous les fichiers qui sont sous "Root" en "local" en utilisant la commande suivante

$sudo chown parineethat `find . -user root`

Ensuite, j'ai pu pousser mon code du local vers le distant.

2voto

Donald L Wilson Points 833

Cela modifiera tous vos fichiers et répertoires .git de manière récursive (de Root à 1000) et vous donnera une liste complète de tous les changements effectués dans le terminal.

sudo chown -Rc $UID .git/

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X