2010-01-28 13 views
6

Hier ist die Situation: Wir haben ein riesiges Svn-Repository, das ist der "Master" (kann nicht geändert werden, weil es tatsächlich von einer anderen Firma "gehört"). Wir würden es vorziehen, lokal in Git zu arbeiten, um die Verzweigungsflexibilität und -geschwindigkeit zu erhalten, die git anbietet. Aber wir wollen nicht das gesamte Repository klonen.Wie erstelle ich einen Git Clone mit Zweigen eines "Subprojekts"?

Die Repository-Struktur sieht in etwa wie folgt aus:

/trunk/project1/* 
     /project2/* 
/branches/branch/project1/* 
       /project2/* 
/tags/tag1/tag1a/project1/* 
      /tag1b/project1/* 
    /tag2/tag2a/project2/* 

Ich bin nur daran interessiert project1, aber ich möchte beide Stamm haben und Zweigen (Tags sind nicht so wichtig, aber es wäre schön, hol sie auch.

Ich bin der Lage, einen einzigen Zweig mit diesen SVN-Remote-Einstellungen geklont zu erhalten:

[svn-remote "svn"] 
    url = https://svn.company.com/svn/branches/branch1/project1 

aber ich möchte die Verzweigungsstruktur erhalten, auch. Ich habe darüber nachgedacht, ignoriert-Pfade mit:

[svn-remote "svn"] 
    ignore-paths=^project2|^project3|... 

aber ich würde die Ignore-Pfade jedes Mal ein neues Top-Level „Projekt“ Verzeichnis hinzugefügt aktualisieren muß, was nicht wirklich nachhaltig ist.

Zweitens brauchen wir wirklich nur die Tags in/tags/tag1 (wenn wir überhaupt Tags brauchen). Irgendwelche Gedanken darüber, wie man das macht, würden geschätzt werden.

Antwort

6

denke ich, dass die folgenden in Ihrer .git/config-Datei funktionieren sollte:

[svn-remote "svn"] 
    url = https://svn.company.com/svn 
    trunk = trunk/project1:refs/remotes/svn/trunk 
    tags = tags/*/project1:refs/remotes/svn/tags/* 
    branches = branches/*/project1:refs/remotes/svn/branches/* 

ich dies auf dem configuration section of the git-svn manpage

+0

basiert Ja, das funktioniert hat. Eine Kuriosität ist, dass der Ausschlusspfad, der beim Auschecken eines einzelnen Zweigs funktionierte, hier nicht funktioniert. Ich hatte url = https://svn.company.com/svn/branches/branch1/project1 ignore-paths =^baddir/ und "baddir" wurde nicht aus svn abgerufen. Mit den gleichen ignore-Pfaden, aber den obigen svn-remote defs, wird "baddir" geholt. – Spencer