2011-05-12 21 views
5

Problem polega na tym, że po usunięciu gałęzi i nie jest ona utracona na zawsze i nadal znajduje się w repozytorium. Usunąłem gałąź z dużą ilością niepotrzebnych plików, ale tak długo, jak jest jeszcze w repozytorium git, czas trwania komendy git jest zbyt duży.Jak usunąć gałąź i wszystkie obiekty, do których się odwołuje

Na razie widzę tylko, że należy usunąć całe repozytorium i odtworzyć je, ale bez zbędnej gałęzi.

Odpowiedz

4

Wierzę, że git gc --prune=now zrobi to, co chcesz: wyczyść niepotrzebne pliki z repozytorium.

Domyślnie git gc usuwa nieosiągalne zatwierdzenia starsze niż 2 tygodnie, więc dodanie --prune=now jest tym, czego potrzebujesz.

+0

+1 git gc rzeczywiście wyczyści luźne obiekty w repozytorium. Jednak problem z klonowaniem zabiera dużo czasu, związany jest ze starymi wersjami plików wciąż znajdującymi się w repozytorium. – ralphtheninja

+0

Dzięki za prune, zmienię moje pytanie. Nie zgadzam się, jeżeli usunięte skrypty są nieosiągalne (co wydaje się być), zostaną usunięte przez 'prune' – CharlesB

+1

Powód jest reflog, który zawiera odniesienia do stanów twoich oddziałów, nawet jeśli gałęzie są już usunięte. –

3

Trzeba usunąć pliki całkowicie za pomocą git filter-branch

http://git-scm.com/docs/git-filter-branch

Można zrobić wiele magii z tego polecenia, co następuje usunięcie pliku z całego zobowiązuje:

git filter-branch --tree-filter 'rm -f filename' HEAD 
+0

Po prostu ciekawy: jeśli zatwierdzenie nie istnieje, ponieważ gałąź jest usuwana, czy nie jest to 'git gc' usuwająca ją? – CharlesB

+0

@CharlesB: Tak, ale możesz chcieć użyć git gc --prune = teraz, aby pozbyć się wszystkich danych. Jest to jednak tylko dane dla lokalnego repozytorium i nie ma żadnego efektu podczas klonowania. Wydaje się, że to pytanie jest złożone. – ralphtheninja

Powiązane problemy