2013-07-25 13 views
10

Ho un problema specifico Non ho trovato la soluzione qui o altrove. Ho un repository SVN e sto usando git-svn per accedervi e lavorarci sopra.come posso rimuovere le directory vuote in git-svn?

Qualche tempo fa, c'erano alcune directory vuote nel repository SVN (vuote, solo sottocartelle). Git non tiene traccia di quelli. Quindi sono stati cancellati dal repository SVN. Ma ho ancora loro, anche dopo l'esecuzione

git svn rebase 

E quando li cancello a mano, essi vengono ricreati durante la prossima

git svn rebase 

Come posso liberarmi di loro?

Ho controllato utilizzando SVN puro e non sono nel repository.

+0

Hmmm, è strano. Git non conosce o tiene traccia delle directory. Hai controllato se ci sono vecchi file invisibili in quelle directory che il tuo capo potrebbe aver perso quando li ha cancellati? Prova a fare un 'ls -la' nella directory per controllare i file nascosti. – Leif

+0

Midnight Commander non nasconde roba;) Le cartelle sono vuote. Può essere un bug? :/ – Paladin

+0

Ho avuto molte (molte) frustrazioni con Git, ma devo ancora incappare in un "bug" legittimo. La maggior parte delle mie frustrazioni si sono rivelate dovute alla mia mancanza di comprensione. Cosa succede se si esegue 'git status' dalla riga di comando di Git; le cartelle appaiono come "non tracciate" per caso? Se esegui 'git ls-files directory_name --error-unmatch' su queste directory; restituisce 'true' o' false'? Prova a clonare nuovamente il repository ('git clone') con Git per vedere se le cartelle sono incluse con un nuovo clone; forse sono semplicemente in giro da una revisione precedente. Sto solo indovinando selvaggiamente qui. – Leif

risposta

1

E 'un po' ruvido, ma ho trovato che il seguente risolve il mio problema:

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

Qualsiasi successiva

git svn rebase 

non si ricreare nulla.

Dal momento che non so come rigenerare questo file senza dover clonare nuovamente il repository, suggerisco di eseguirne un backup prima. Si tratta di un file di testo, quindi suppongo si potrebbe anche modificare il suo contenuto per rimuovere le voci che finiscono per creare

+1

Non eliminare roba in' .git'. –

11

Penso che troverete la risposta in 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

Ho trovato questo anche su google, ma non è la risposta alla mia domanda. Questo è per le situazioni in cui elimini la cartella e la comandi tramite git. Il mio problema è che qualcuno ha cancellato la directory tramite svn, ma l'ho ancora nel repository git (ma sono vuoti) e quando li elimino vengono ricreati automaticamente al prossimo rebase. – Paladin

+0

Immagino che non sia davvero "la cosa giusta da fare", ma forse potresti (usando Git) aggiungere un file di testo fittizio nelle cartelle, aggiungere "add" e "commit" in modo che vengano tracciati e quindi eliminati ('git rm') i file e confermare la cancellazione. Allora forse ti libererai delle cartelle, ma questo sporcherebbe la tua storia un po '. – Leif

+0

Posso vedere dove mi manderebbe il capo con questo approccio: D – Paladin

1

di Tell git svn che non dovrebbe cercare di ricreare le directory vuote:

git config svn-remote.svn automkdirs false 

Questo è il apposita sezione della pagina man:

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".

si noti che è facile confondere questo argomento con il tema di commettere/non commettere directory vuote a svn (che è quello che è per svn.rmdir).