Miałem to samo pytanie, jakie tu zadałem: Nowe repozytorium git w katalogu głównym, aby zasubskrybować istniejące repozytorium w podkatalogu
Podążyłem za tą odpowiedzią tutaj: Nowe repozytorium git w katalogu głównym, aby zasubskrybować istniejące repozytorium w podkatalogu
Teraz gitk --all
pokazuje dwie historie: jedną kulminującą w bieżącej master
i drugą nazwaną original/refs/heads/master
.
Nie wiem, co to za druga historia ani jak ją usunąć z repozytorium. Nie potrzebuję dwóch historii w moim repozytorium.
Jak się tego pozbyć?
Aby się odtworzyć:
mkdir -p project-root/path/to/module
cd project-root/path/to/module
mkdir dir1 dir2 dir3
for dir in * ; do touch $dir/source-file-$dir.py ; done
git init
git add .
git commit -m 'Initial commit'
Teraz mamy problem z oryginalnym plakatem. Przenieśmy katalog główny repozytorium git do katalogu głównego projektu, korzystając z odpowiedzi podanej powyżej:
git filter-branch --tree-filter 'mkdir -p path/to/module ; git mv dir1 dir2 dir3 path/to/module' HEAD
rm -rf path
cd ../../../ # Now PWD is project-root
mv path/to/module/.git .
git reset --hard
Teraz zobacz mój obecny problem:
gitk --all &
git show-ref
Jak pozbyć się refs/original/heads/master
całej historii?
źródło
Odpowiedzi:
refs/original/*
jest dostępny jako kopia zapasowa na wypadek, gdybyś zepsuł swoją gałąź filtrów. Uwierz mi, to naprawdę dobry pomysł.Po sprawdzeniu wyników i upewnieniu się, że masz to, czego chcesz, możesz usunąć kopię zapasową:
lub jeśli zrobiłeś to wielu referencjom i chcesz to wszystko wymazać:
(To jest pobierane bezpośrednio ze strony podręcznika gałęzi filtrów).
Nie dotyczy to ciebie, ale innych, którzy mogą to znaleźć: Jeśli wykonasz gałąź filtru, która usuwa zawartość zajmującą znaczną ilość miejsca na dysku, możesz również chcieć uruchomić
git reflog expire --expire=now --all
igit gc --prune=now
wygaśnąć swoje dzienniki rejestracyjne i usunąć nieużywane obiekty . (Ostrzeżenie: całkowicie, całkowicie nieodwracalne. Bądź pewien, zanim to zrobisz.)źródło
git update-ref -d refs/original/refs/heads/master
git update-ref -d original/refs/heads/master
? Jednak tylko twoje drugie polecenie działało dla mnie.git update-ref -d refs/original/refs/heads/master
okazji. Możesz zobaczyć pełną nazwę używającgit show-ref
.git show-ref refs/original/* --hash | xargs -n 1 git update-ref -d
?A jeśli korzystasz z Windows PowerShell:
źródło
filter-branch
przechowuje kopie zapasowe, więc repozytorium musi wyczyścić dzienniki i śmieci. Upewnij się, że nie ma potrzeby tworzenia kopii zapasowych przed usunięciem:źródło