Nowe repo z skopiowaną historią tylko aktualnie śledzonych plików
Nasze obecne repo ma dziesiątki tysięcy zatwierdzeń, a nowy klon przekazuje prawie gigant danych (istnieje wiele plików jar, które zostały usunięte w historii). Chcielibyśmy zmniejszyć ten rozmiar, tworząc nowe repo, które przechowuje pełną historię tylko dla plików, które są aktualnie aktywne w repo, lub ewentualnie zmodyfikować bieżące repo, aby wyczyścić historię usuniętych plików. Ale nie jestem pewien, jak to zrobić w praktycznej rezydencji.
Próbowałem skryptu wUsuń usunięte pliki z historii git:
for del in `cat deleted.txt`
do
git filter-branch --index-filter "git rm --cached --ignore-unmatch $del" --prune-empty -- --all
# The following seems to be necessary every time
# because otherwise git won't overwrite refs/original
git reset --hard
git for-each-ref --format="%(refname)" refs/original/ | xargs -n 1 git update-ref -d
git reflog expire --expire=now --all
git gc --aggressive --prune=now
done;
Ale biorąc pod uwagę, że w historii mamy dziesiątki tysięcy usuniętych plików i dziesiątki tysięcy zatwierdzeń, uruchomienie skryptu zajęłoby wieczność. Zacząłem uruchamiać to dla JEDNEGO usuniętego pliku 2 godziny temu, a polecenie filtrujące gałąź nadal działa, przechodzi każdy z ponad 40 000 zatwierdzeń pojedynczo, a to dotyczy nowego Macbooka Pro z napędem SSD.
Przeczytałem także stronęhttps://help.github.com/articles/remove-sensitive-data ale działa to tylko do usuwania pojedynczych plików.
Czy ktoś był w stanie to zrobić? Naprawdę chcę zachować historię obecnie śledzonych plików, nie jestem pewien, czy korzyść z oszczędności miejsca byłaby warta stworzenia nowego repo, jeśli nie możemy zachować historii.