2010-11-22 17 views
6

ich versehentlich eine Subversion-Repository geklont habe, ohne das --stdlayout Argument hinzufügen, gibt mir so etwas wie:von Git-Svn-Klon ohne --stdlayout

$ git svn clone --prefix=svn/ svn+ssh://code.example.com/project 
[two weeks later] 
$ git branch -a                         
* master 
    remotes/svn/git-svn 

Mit dem SVN/git-svn Layout etwas wie sein:

branches/* 
tags/* 
trunk/* 

Jeder Weg, um sich davon zu erholen?

Antwort

3

Derzeit scheint es, als ob ein Neuanfang die einzige Option ist, die Interoperabilität mit SVN erhalten wird.

+2

nicht die einzige Option, sondern die einfachste. Wenn Sie die git-svn-id-Zeile umschreiben und rev_map löschen, kann git-svn sie für Sie neu erstellen. –

2

Das kommt darauf an: Wollen Sie in Zukunft mit Subversion zusammenarbeiten?

Wenn nicht, sollten Sie manuell eine Verzweigung in git für jede Verzweigung in branches erstellen und den Inhalt dieses Zweigverzeichnisses bis zur obersten Ebene verschieben. Das gibt Ihnen ein Commit zu arbeiten, und git's Umbenennungs-Tracking sollte bedeuten, dass der Blick auf die Geschichte ziemlich gut funktioniert. Wenn Sie Tags verwenden möchten, können Sie auf ähnliche Weise für jedes Tag eine Verzweigung erstellen, diese markieren und dann die Verzweigung löschen.

Das ist nicht schön, aber es sollte praktikabel sein.

Weitere Arbeit wäre, git filter-branch zu verwenden, um den Verlauf der einzelnen Zweige, die Sie gerade erstellt haben, auf dieselbe Weise neu zu schreiben, wie Sie den Tipp neu geschrieben haben. Dies sollte Sie mit einem Repository verlassen, das korrekt aussieht. Sie würden jedoch immer noch keine Subversion-Integration erhalten, und Sie müssten herausfinden, wie Sie mit dem ursprünglichen Verzweigungspunkt umgehen.

Viel mehr Arbeit wäre herauszufinden, wie git svn seine Metadaten speichert und das Repository (wahrscheinlich wieder mit git filter-branch) entsprechend transformiert - alle Daten sollten da sein :).

+0

git-svn speichert Metadaten an zwei Stellen: die 'git-svn-id' Zeile in der Commit-Nachricht und die' .git/svn/* /. Rev_map' Datei. .. Wenn Sie die 'rev_map' löschen, wird sie von' git-svn-id' –

3

Es ist keine exakte Antwort, aber was ich getan habe, war die -r Flag, um nur die letzten paar Commits zu spezifizieren, da ich eigentlich Commits von vor einem Jahr sowieso nicht wollte.

git svn clone --prefix=svn/ -s -r12000:HEAD http://some/svn/repo

Dies erfordert, dass Sie wissen, welche rev Zahl, die Sie zurück zu, in diesem Fall gehen wollen, 12000. Es erlaubte mir meine geistige Gesundheit zu halten, nachdem die -s Flagge fehlt und tat, was ich wirklich tun wollte in erster Linie in einer angemessenen Zeit.