J'ai un problème étrange que je n'arrive pas à résoudre. Voici ce qui s'est passé:
J'ai eu quelques fichiers de log dans un dépôt github que je ne voulais pas là. 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 sûr, j’ai d’abord fait une sauvegarde, puis essayé. Cela semblait bien fonctionner. J'ai ensuite fait un git Push -f et j'ai été accueilli avec 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 bien fonctionné, car les fichiers semblent avoir disparu du référentiel GitHub. Si j'essaie de nouveau Push, 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
MODIFIER
$ Sudo chgrp {user} .git/logs/refs/remotes/Origin/master
$ Sudo chown {user} .git/logs/refs/remotes/Origin/master
$ git Push
Everything up-to-date
Merci!
MODIFIER
Uh Oh. Problème. J'ai travaillé sur ce projet toute la nuit et je suis juste allé valider mes modifications:
error: Unable to append to .git/logs/refs/heads/master: Permission denied
fatal: cannot update HEAD ref
Donc je:
Sudo chown {user} .git/logs/refs/heads/master
Sudo chgrp {user} .git/logs/refs/heads/master
J'essaie de nouveau et je reçois:
error: Unable to append to .git/logs/HEAD: Permission denied
fatal: cannot update HEAD ref
Donc je:
Sudo chown {user} .git/logs/HEAD
Sudo chgrp {user} .git/logs/HEAD
Et puis j'essaye de nouveau le commit:
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 [email protected]:IAmCorbin/MooKit.git
59da24e..68b6397 master -> master
Hourra. Je saute sur http://GitHub.com et consulte le référentiel. Mon dernier commit est introuvable. :: gratter la tête :: donc je pousse à nouveau:
Everything up-to-date
Umm ... ça ne ressemble pas à ça. Je n'ai jamais eu ce problème auparavant, cela pourrait-il être un problème avec github? ou ai-je gâché quelque chose avec mon projet git?
MODIFIER
Peu importe, j'ai fait un simple:
git Push Origin master
et ça a bien marché.
Cela ressemble à du fait que vous avez exécuté git en tant que root localement, ce qui a eu pour effet de modifier la propriété de certains fichiers qui suivent l'emplacement de la branche Origin
.
Corrigez la propriété du fichier, et ça devrait aller:
# run this from the root of the git working tree
Sudo chown -R "${USER:-$(id -un)}" .
Dans mon cas, j'ai créé les fichiers avec l'autorisation root localement et j'ai essayé de transmettre le code à distance avec des autorisations locales. J'ai donc lancé cette commande
$find . -user root
pour savoir ce que tous les fichiers ont "root" en tant que propriétaire. Et puis j'ai changé de propriétaire pour tous les fichiers qui sont sous la racine en local en utilisant la commande suivante
$Sudo chown parineethat `find . -user root`
Ensuite, j'ai pu pousser mon code de local à distant.
Concentrons-nous sur ce dont il se plaint exactement:
Autorisation refusée: Impossible de mettre à jour la réf 'références/télécommandes/origine/maître'.
Avant de procéder à des modifications récursives de mod/propriétaire, parcourez votre chemin vers ce fichier et corrigez les autorisations incorrectes.
Je pense que j'ai causé ce problème en créant une branche alors que j'étais root, puis en essayant de jouer avec cette branche en tant qu'utilisateur.
Cela modifiera tous vos fichiers .git et vos répertoires de manière récursive (de la racine à 1000) et vous donnera une liste complète de toutes les modifications apportées au terminal.
Sudo chown -Rc $ UID .git /