J'ai un problème étrange que je n'arrive pas à résoudre. Voici ce qui s'est passé:
J'avais des fichiers journaux dans un référentiel github que je ne voulais pas. J'ai trouvé ce script qui supprime complètement les fichiers de l'historique de 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 je l'ai 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 s'être bien déroulé, car les fichiers semblent avoir disparu du référentiel GitHub, si j'essaye 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
ÉDITER
$ 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!
ÉDITER
Oh oh. Problème. J'ai travaillé sur ce projet toute la nuit et je suis juste allé valider mes changements:
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'essaye à nouveau le commit et j'obtiens:
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 à 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 vérifie le référentiel, et mon dernier commit ne se trouve nulle part. :: scratch head :: Alors je pousse à nouveau:
Everything up-to-date
Hum ... ça ne ressemble pas à ça. Je n'ai jamais eu ce problème auparavant, est-ce que cela pourrait être un problème avec github? ou ai-je gâché quelque chose avec mon projet git?
ÉDITER
Peu importe, j'ai fait un simple:
git push origin master
et ça a bien poussé.
sudo chown -R "$USER" .
et de ne pas supposer la raison. :)USER
n'est pas garanti par pubs.opengroup.org/onlinepubs/009695399/utilities/… , donc il pourrait être plus sûr à utiliser"$(id -un)"
.is not in the sudoers file. This incident will be reported.
- un conseil sur ce que je peux faire? Merci."${var:-default}"
se développe jusqu'à la valeur de la variable"$var"
, sauf si cette valeur est vide ou non définie, auquel cas elle se résout endefault
. Ainsi, nous développons soit vers"$USER"
, soit la sortie générée en exécutantid -un
.Concentrons-nous sur ce dont il se plaint exactement:
Avant de faire des changements de mod / propriété récursifs, parcourez votre chemin vers ce fichier et corrigez toutes 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.
la source
Dans mon cas, j'ai créé les fichiers avec l'autorisation root localement et j'ai essayé de pousser le code à distance avec des autorisations locales. Alors j'ai exécuté cette commande
pour savoir quels fichiers ont "root" comme propriétaire. Et puis j'ai changé de propriétaire pour tous les fichiers sous racine en local en utilisant la commande suivante
Ensuite, j'ai pu pousser mon code de local à distant.
la source
sudo chown parineethat `find . -user root`
n'est pas fiable - ne fonctionnera pas correctement avec les noms de fichiers avec des espaces. Au lieu de cela,sudo find . -user root -exec chown parineethat {} +
. Voir BashPitfalls # 1 pour une discussion pertinente.Cela changera tous vos fichiers et répertoires .git de manière récursive (de la racine à 1000) et vous donnera une liste complète de toutes les modifications apportées dans le terminal.
la source
J'ai essayé de réparer la propriété de Git, mais cela ne fonctionne toujours pas.
Mais, j'ai réussi à le réparer en créant la branche locale avec un nom différent et en la supprimant.
Ensuite, je vérifie à nouveau le même nom de branche et cela fonctionne.
TLDR;
Je ne peux pas commander `staging / rc '.
Donc, je vérifie en utilisant à la
staging
place que la télécommande pointe vers `staging / rc '.Et, je le supprime et je checkout à nouveau Mais, cette fois, j'utilise
staging/rc
comme nom de ma succursale locale.Cela fonctionne et je ne sais pas pourquoi.
la source
Veuillez d'abord donner les autorisations du
root
compte comme ci-dessousaprès cela, exécutez la commande commit
la source
chown -R root:user directory
, et thenchmod -R 775 directory
(ou770
, si d'autres comptes n'ont pas besoin d'un accès en lecture non plus).