Mam dziwny problem, którego nie mogę rozwiązać. Oto, co się stało:
Miałem kilka plików dziennika w repozytorium github, których tam nie chciałem. Znalazłem ten skrypt, który całkowicie usuwa pliki z historii git w następujący sposób:
#!/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
Oczywiście najpierw utworzyłem kopię zapasową, a następnie spróbowałem. Wydawało się, że działa dobrze. Następnie wykonałem git push -f i zostałem powitany następującymi komunikatami:
error: Unable to append to .git/logs/refs/remotes/origin/master: Permission denied
error: Cannot update the ref 'refs/remotes/origin/master'.
Wygląda na to, że wszystko poszło dobrze, ponieważ wydaje się, że pliki zniknęły z repozytorium GitHub, jeśli spróbuję ponownie i otrzymam to samo:
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
EDYTOWAĆ
$ sudo chgrp {user} .git/logs/refs/remotes/origin/master
$ sudo chown {user} .git/logs/refs/remotes/origin/master
$ git push
Everything up-to-date
Dzięki!
EDYTOWAĆ
O o. Problem. Pracowałem nad tym projektem całą noc i po prostu poszedłem zatwierdzić zmiany:
error: Unable to append to .git/logs/refs/heads/master: Permission denied
fatal: cannot update HEAD ref
Więc ja:
sudo chown {user} .git/logs/refs/heads/master
sudo chgrp {user} .git/logs/refs/heads/master
Próbuję ponownie zatwierdzić i otrzymuję:
error: Unable to append to .git/logs/HEAD: Permission denied
fatal: cannot update HEAD ref
Więc ja:
sudo chown {user} .git/logs/HEAD
sudo chgrp {user} .git/logs/HEAD
A potem ponownie próbuję zatwierdzić:
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
Brawo. Wskakuję na http://GitHub.com i sprawdzam repozytorium, a mojego ostatniego zatwierdzenia nie ma gdzie znaleźć. :: drap się po głowie :: Więc znowu pcham:
Everything up-to-date
Umm ... na to nie wygląda. Nigdy wcześniej nie miałem tego problemu, czy to może być problem z githubem? czy może coś zepsułem z moim projektem git?
EDYTOWAĆ
Nieważne, zrobiłem proste:
git push origin master
i działało dobrze.
sudo chown -R "$USER" .
i nie zakładać rozsądku. :)USER
nie jest gwarantowane przez pubs.opengroup.org/onlinepubs/009695399/utilities/… , więc może być bezpieczniejsze w użyciu"$(id -un)"
.is not in the sudoers file. This incident will be reported.
- jakaś wskazówka na temat tego, co mogę zrobić? Dzięki."${var:-default}"
rozwija się do wartości zmiennej"$var"
, chyba że ta wartość jest pusta lub nieustawiona, w takim przypadku jest rozwiązywana nadefault
. W ten sposób albo rozwijamy do"$USER"
, albo dane wyjściowe generowane przez uruchomienieid -un
.Skoncentrujmy się na tym, na co dokładnie narzeka:
Przed dokonaniem cyklicznych zmian modyfikacji / własności przejdź do tego pliku i napraw wszelkie nieprawidłowe uprawnienia.
Myślę, że spowodowałem ten problem, tworząc gałąź, gdy byłem rootem, a następnie próbując zadzierać z tą gałęzią jako mój użytkownik.
źródło
W moim przypadku utworzyłem pliki z uprawnieniami roota lokalnie i próbowałem wypchnąć kod do zdalnego z uprawnieniami lokalnymi. Więc uruchomiłem to polecenie
aby dowiedzieć się, jakie pliki mają właściciela „root”. A potem zmieniłem właściciela wszystkich plików, które są w katalogu głównym, na lokalne za pomocą następującego polecenia
Wtedy mogłem przesłać mój kod z lokalnego na zdalny.
źródło
sudo chown parineethat `find . -user root`
jest zawodny - nie będzie działał poprawnie z nazwami plików ze spacjami. Zamiast tegosudo find . -user root -exec chown parineethat {} +
. Odpowiednią dyskusję znajdziesz w BashPitfalls # 1 .Spowoduje to rekursywną zmianę wszystkich twoich plików i katalogów .git (od roota do 1000) i da ci pełną listę wszystkich zmian dokonanych w terminalu.
źródło
Próbowałem naprawić własność Git, ale nadal nie działa.
Ale udało mi się to naprawić, tworząc oddział lokalny o innej nazwie i usuwając go.
Następnie ponownie sprawdzam tę samą nazwę gałęzi i działa.
TLDR;
Nie mogę pobrać pliku `staging / rc '.
Więc sprawdzam, używając
staging
zamiast tego, że pilot wskazuje na `staging / rc '.Usuwam go i ponownie płacę. Ale tym razem używam
staging/rc
nazwy mojego lokalnego oddziału.Działa i nie mam pojęcia, dlaczego.
źródło
Najpierw podaj uprawnienia z
root
konta, jak poniżejpo tym uruchom komendę commit
źródło
chown -R root:user directory
i następniechmod -R 775 directory
(lub770
, jeśli inne konta również nie potrzebują dostępu do odczytu).