2010-03-03 13 views
7

Ich möchte Git klonen ein SVN-Repository mit Ausnahme für einen Ordner im Stammverzeichnis von Svn.git svn Klon außer einem bestimmten Ordner

Wie mache ich das?

Ich konnte git svn clone svnrepo/dir/sb-dir/ tun, wenn ich nur sb-dir benötigt, aber ich brauche alle Ordner (und Dateien) im dir mit Ausnahme der design Ordner

Antwort

3

Wenn Sie die latest Git1.7.0 verwenden, bietet es eine spärliche Kasse Funktion.

Mit der Funktion "Sparse Checkout" kann nur ein Teil des Arbeitsbaums ausgecheckt werden.

Siehe Git Sparse Checkout SO question für mehr: Sie noch die alle Repo klonen müssen, aber Sie können mit nur Teile des geklonten Repo)


Der einzige (dh füllen Sie Ihre Arbeitsbaum) Kasse Ein anderer Weg würde design als Submodul transformieren.
Da die GitPro book mentions:

Git Submodul Unterstützung ein Repository ermöglicht als ein Unterverzeichnis zu enthalten, eine Kasse eines externen Projekts.
Submodule behalten ihre eigene Identität; Die Submodul-Unterstützung speichert nur den Speicherort des Submodul-Repositorys und die Commit-ID, sodass andere Entwickler, die das entsprechende Projekt ("Superprojekt") klonen, problemlos alle Submodule mit derselben Revision klonen können.
Partielle Checkouts des Superprojekts sind möglich: Sie können Git sagen, keine, einige oder alle Submodule zu klonen.

Submodul ist die einzige Art, wie ich bin mir bewusst, „partial Klonen“ zu erreichen, da Ihr Fall n ist das Klonen Teil was problematisch ist.
Von Ihre Kommentare:

mein Problem ist, dass Design-Ordner rund 700 mb ist; und es dauert Stunden, um Svn Klon zu git. Der Rest des gesamten Projekts ist in 10 Sekunden von mb.

Das bedeutet aber, die SVN repo Modifizieren design als „externe“ Referenz zu isolieren, dann git svn clone und in der geklonten Git fügt Repo um eine Submodul Referenz.

+1

Danke! Aber mein Problem ist, dass Design-Ordner etwa 700 MB ist; und es dauert Stunden, um Svn Klon zu git. Der Rest des gesamten Projekts ist in 10 Sekunden von mb. Es ist in erster Linie falsch, ich weiß, um es in Repo zu setzen. Aber ich wollte einen vernünftigen Weg, um lokal mit Git umzugehen. Es scheint nicht möglich, dann –

+0

@becomingGuru: die vernünftige Art wäre, das Repo zu trennen und das Design in seinem eigenen Repo zu isolieren, das als Submodul referenziert wird. Auf diese Weise erreichen Sie genau das, wonach Sie suchen. Siehe http://stackoverflow.com/questions/359424/detach-subdirectory-into-separate-git-repository – VonC

2

können Sie die --ignore-paths=<regex> Option git svn init oder git svn fetch, verwenden oder die Konfigurationsoption svn-remote.<name>.ignore-paths zu .git/config hinzuzufügen. Dies wird dokumentiert als "Dies ermöglicht es, einen regulären Perl-Ausdruck anzugeben, der das Überspringen aller übereinstimmenden Pfade beim Auschecken aus SVN verursacht." Durchsuchen Sie die manual nach "ignore-paths" für weitere Details.

Nachdem ich das Experiment in this answer versucht habe, habe ich gelernt, dass die Regex auf den vollständigen Pfad jedes Verzeichnisses oder Datei aus dem Repository-Root angewendet wird. Wenn Sie also ein Standard-Repository-Layout haben und dasselbe von jedem Trunk/Zweig/Tag ausschließen möchten, können Sie eine Regex wie ^(trunk|((branches|tags)/[^/]+))(<file-to-ignore>|<other-file-to-ignore>) verwenden.

Verwandte Themen