2013-07-25 11 views
10

Ich habe ein spezifisches Problem Ich habe hier oder anderswo keine Lösung gefunden. Ich habe ein SVN-Repository und ich benutze git-svn, um darauf zuzugreifen und daran zu arbeiten.Wie kann ich leere Verzeichnisse in git-svn entfernen?

Vor einiger Zeit gab es einige leere Verzeichnisse im SVN-Repository (leer, nur Unterordner). Git verfolgt diese nicht. Dann wurden sie aus dem SVN-Repository gelöscht. Aber ich habe sie noch einmal nach dem Laufen

git svn rebase 

Und wenn ich sie von Hand löschen, werden sie während der nächsten

neu erstellt
git svn rebase 

Wie kann ich sie loswerden?

Ich überprüft mit reinen SVN und sie sind nicht im Repository.

+0

Hmmm, das ist seltsam. Git kennt Verzeichnisse überhaupt nicht oder verfolgt sie nicht. Haben Sie in den Verzeichnissen nach alten unsichtbaren Dateien gesucht, die Ihr Chef möglicherweise übersehen hat, als er sie gelöscht hat? Versuchen Sie, im Verzeichnis nach 'ls -la' zu suchen, um nach versteckten Dateien zu suchen. – Leif

+0

Midnight Commander versteckt nichts;) Die Ordner sind leer. Kann das ein Fehler sein? :/ – Paladin

+0

Ich hatte viele (viele) Frustrationen mit Git, aber ich muss noch auf einen echten "Bug" stolpern. Die meisten meiner Frustrationen haben sich aus meinem mangelnden Verständnis ergeben. Was passiert, wenn Sie 'git status' von der Git-Befehlszeile aus ausführen; Werden die Ordner zufällig als "untracked" angezeigt? Wenn Sie 'git ls-files verzeichnisname --error-unmatch 'in diesen Verzeichnissen ausführen; Gibt es "wahr" oder "falsch" zurück? Versuchen Sie, das Repository (Git-Klon) mit Git neu zu klonen, um zu sehen, ob die Ordner in einem neuen Klon enthalten sind. vielleicht hängen sie nur von einer älteren Revision ab. Ich vermute nur wild hier. – Leif

Antwort

1

Es ist ein wenig rau, aber ich fand, dass das folgende mein Problem löst:

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

nachfolgenden Alle

git svn rebase 

wird nichts neu.

Da ich nicht weiß, wie man diese Datei neu erstellt, ohne den Repo erneut zu klonen, schlage ich vor, zuerst eine Sicherungskopie davon zu erstellen. Es ist eine Textdatei, so dass ich denke, man könnte auch seinen Inhalt bearbeiten, um die Einträge zu entfernen, die am Ende der Schaffung

+1

Lösche keine Dateien in' .git'. –

11

Ich denke, Sie finden Ihre Antwort 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

Ich fand dies beim googeln auch, aber es ist keine Antwort auf meine Frage. Dies ist für Situationen, in denen Sie Ordner löschen und über Git committieren. Mein Problem ist, dass jemand das Verzeichnis via svn gelöscht hat, aber ich habe es immer noch im git-Repository (aber sie sind leer) und wenn ich sie lösche, werden sie beim nächsten Rebase automatisch neu erstellt. – Paladin

+0

Ich denke, es ist nicht wirklich "das Richtige", aber vielleicht könntest du (mit Git) Dummy - Textdateien in die Ordner einfügen, sie addieren und committen, so dass sie verfolgt und dann gelöscht werden ('git rm') die Dateien und die Löschung bestätigen. Dann würden Sie vielleicht die Ordner loswerden, aber es würde Ihre Geschichte etwas verdüstern. – Leif

+0

Ich kann sehen, wo würde Boss mich mit diesem Ansatz senden: D – Paladin

1

Tells git svn, dass es nicht leere Verzeichnisse erstellen sollte versuchen:

git config svn-remote.svn automkdirs false 

Dies ist relevanter Abschnitt der Manpage:

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

Beachten sie, dass es einfach ist, dieses Thema mit dem Thema zu verwirren begehen/nicht begeht leere Verzeichnisse zu sVN (was svn.rmdir ist).