Usunąć refs/original/heads / master z git repo po filter-branch --tree-filter?

Miałem to samo pytanie, co tutaj: nowe repozytorium git w katalogu głównym, aby subsume repozytorium exist w podkatalogu

Podążałem za tą odpowiedzią tutaj: nowe repozytorium git w katalogu głównym, aby subsume repozytorium exist w podkatalogu

Teraz, gitk --all pokazuje dwie historie: jedną zakończoną prądem master i jedną nazwaną original/refs/heads/master.

Nie wiem co to za druga historia, ani jak ją usunąć z repo. I nie potrzebuję dwóch historii w moim repozytorium. Jak się go pozbyć?

Aby odtworzyć siebie:

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 root z git repo do project-root używając 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

A teraz zobacz mój obecny problem:

gitk --all &
git show-ref

Jak pozbyć się refs/original/heads/master i całej związanej z tym historii?

Author: Community, 2011-10-04

3 answers

refs/original/* jest tam jako kopia zapasowa, na wypadek, gdybyś zepsuł swoją gałąź filtra. Uwierz mi, to naprawdę dobry pomysł.

Po sprawdzeniu wyników i upewnieniu się, że masz to, czego chcesz, możesz usunąć kopię zapasową ref:

git update-ref -d refs/original/refs/heads/master

Lub jeśli zrobiłeś to wielu sędziom i chcesz to wszystko wymazać: {]}

git for-each-ref --format="%(refname)" refs/original/ | xargs -n 1 git update-ref -d

(pobrane bezpośrednio ze strony podręcznika filter-branch.)

To nie dotyczy ciebie, ale innych, którzy mogą to znaleźć: jeśli zrobisz filter-branch, który usuwa zawartość zajmującą znaczne miejsce na dysku, możesz również uruchomić git reflog expire --expire=now --all i git gc --prune=now, Aby wygasnąć swoje reflogy i usunąć nieużywane obiekty. (Uwaga: całkowicie, całkowicie nieodwracalne. Bądź bardzo pewny, zanim to zrobisz.)

 339
Author: Cascabel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-07-24 15:31:13

A jeśli jesteś w Windows PowerShell:

git for-each-ref --format="%(refname)" refs/original/ | foreach-object -process { git update-ref -d $_ }
 11
Author: Guilherme Duarte,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 21:02:54

filter-branch przechowuje kopie zapasowe, więc repozytorium musi oczyścić reflogi i zbierać śmieci. Upewnij się, że nie ma potrzeby tworzenia kopii zapasowych przed usunięciem:

rm -Rf .git/refs/original
git gc --aggressive --prune=now
 7
Author: Kiryl Plyashkevich,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-19 08:38:31