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
.
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?
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.)
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 $_ }
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
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