2013-07-25 19 views
10

Mam specyficzny problem Nie znalazłem rozwiązania tutaj ani nigdzie indziej. Mam repozytorium SVN i używam git-svn, aby uzyskać do niego dostęp i pracować nad nim.Jak mogę usunąć puste katalogi w git-svn?

Jakiś czas temu w repozytorium SVN znajdowały się puste katalogi (puste, tylko podfoldery). Git ich nie śledzi. Następnie zostały usunięte z repozytorium SVN. Ale nadal mam je nawet po uruchomieniu

git svn rebase 

I kiedy je usunąć ręcznie, są one odtworzone podczas następnego

git svn rebase 

Jak mogę się ich pozbyć?

Sprawdziłem za pomocą czystego SVN i nie ma ich w repozytorium.

+0

Hmmm, to dziwne. Git w ogóle nie zna ani nie śledzi katalogów. Czy sprawdziłeś, czy w tych katalogach są jakieś stare niewidoczne pliki, które mógł przeoczyć twój szef, kiedy je usunął? Spróbuj wykonać 'ls -la' w katalogu, aby sprawdzić ukryte pliki. – Leif

+0

Midnight Commander nie ukrywa rzeczy;) Foldery są puste. Czy to może być błąd? :/ – Paladin

+0

Miałem wiele (wielu) frustracji z Git, ale jeszcze nie natknąłem się na "błąd". Większość moich frustracji okazała się wynikać z mojego braku zrozumienia. Co się stanie, jeśli wykonasz 'git status' z wiersza poleceń Git; czy foldery są przypadkiem "nieśledzone"? Jeśli wykonasz polecenie 'git ls-files directory_name --error-unmatch' na tych katalogach; czy zwraca 'true' lub' false'? Spróbuj ponownie sklonować repozytorium ('git clone') za pomocą Git, aby zobaczyć, czy foldery są dołączone do nowego klonu; może po prostu kręcą się ze starszej wersji. Po prostu zgaduję tu dziko. – Leif

Odpowiedz

1

To jest trochę szorstki, ale okazało się, że następuje rozwiązuje mój problem:

rm .git/svn/refs/remotes/trunk/unhandled.log 
git clean -df 

Wszelkie późniejsze

git svn rebase 

nie będzie niczego odtworzyć.

Ponieważ nie wiem, jak zregenerować ten plik bez ponownego klonowania repo, sugeruję wykonanie jego kopii zapasowej. Jest to plik tekstowy, więc przypuszczam, że można także edytować jej zawartość, aby usunąć wpisy, które kończą się tworząc

+1

Nie usuwaj rzeczy z' .git'. –

11

Myślę, że znajdziesz odpowiedź w this blog post.

[...]

Remove directories from the SVN tree if there are no files left behind. SVN can version empty directories, and they are not removed by default if there are no files left in them. git cannot version empty directories. Enabling this flag will make the commit to SVN act like git. config key: svn.rmdir

To fix the root of the problem set the git config globally:

git config --global svn.rmdir true

[...]

+2

Znalazłem to również podczas logowania, ale to nie jest odpowiedź na moje pytanie. Dotyczy to sytuacji, w których usuwasz folder i zatwierdzasz go za pomocą git. Mój problem polega na tym, że ktoś usunął katalog za pomocą svn, ale nadal mam go w repozytorium git (ale są puste), a po ich usunięciu są one automatycznie ponownie tworzone przy następnym rebase. – Paladin

+0

Domyślam się, że nie jest to "właściwy sposób", ale może mógłbyś (używając Git) dodać do folderów fałszywe pliki tekstowe, 'dodaj' i' commit' je, aby były śledzone, a następnie usuwane ('git rm') pliki i dokonaj usunięcia. Wtedy może pozbyłbyś się folderów, ale trochę by to zabrudziło twoją historię. – Leif

+0

Widzę, gdzie szef wysłałby mnie z takim podejściem: D – Paladin

1

Tell git svn, że nie powinniśmy próbować odtworzyć pustych katalogów:

git config svn-remote.svn automkdirs false 

to jest Odpowiednia sekcja strony człowieka:

svn-remote.<name>.automkdirs

Normally, the "git svn clone" and "git svn rebase" commands attempt to recreate empty directories that are in the Subversion repository. If this option is set to "false", then empty directories will only be created if the "git svn mkdirs" command is run explicitly. If unset, git svn assumes this option to be "true".

Zauważ, że nie jest łatwo pomylić ten temat z tematem popełnienie/nie popełniając pustych katalogów do SVN (czyli to, co jest dla svn.rmdir).

Powiązane problemy