2016-08-09 107 views
0

Ich klonte ein SVN-Repository mit . Nachdem das Repository Klonen gereinigt ich es auf die atlassian migration script mit:Warum löscht GIT nach dem Ausführen von git fetch -p origin alle Zweige eines geklonten SVN-Repos?

java -Dfile.encoding=utf-8 -jar ~/svn-migration-scripts.jar clean-git 
    --force. 

Dann hat ich die neue Fernbedienung und schob das Repository in den neuen Remote-GIT-Server git push --all origin

Nach dem Versuch, einige mehr ich auch mit aufzuräumen git fetch -p origin lief aber, dass löscht alle ursprünglichen Zweige SVN:

... 
x [deleted]   (none)  -> origin/release_II 
x [deleted]   (none)  -> origin/release_III 
... etc 

Ist das normal für geklonte SVN-Repositories? Es scheint, als ob die ursprünglichen SVN-Zweige keine echten Zweige im neuen GIT-Repository sind. Habe ich während des Migrationsprozesses etwas vergessen? Der Befehl prune scheint sehr schwer rückgängig zu machen. Wie können wir sicherstellen, dass wir diese Zweige nicht verlieren, wenn wir (vielleicht zufällig) ein ähnliches Kommando in der Zukunft ausführen?

Antwort

0

Es stellt sich heraus, dass meine SVN-Zweige nicht wirklich in echte GIT-Zweige konvertiert wurden. Also die einzigen Zweige, die ich sah, wo entfernte Zweige auf den SVN-Repo zeigen, der nicht mehr erreicht werden konnte. Aus diesem Grund wurden alle meine Zweige entfernt.

Die meisten svn-git Migration Tutorials (einschließlich git-book) und Tools gehen davon aus, dass Sie tatsächliche Git-Zweige erstellen können, indem Sie auf dem geklonten Repo cp -Rf .git/refs/remotes/origin/* .git/refs/heads/ ausführen. In meinem Fall befanden sich die Zweige jedoch in einem speziellen 'svn' -Verzeichnis: .git\svn\refs\remotes\origin.

ich geändert einige Bash-Skripte ich online die gefunden folgende:

# Convert SVN branches to GIT branches 
for branch in `git branch -r | grep "origin/[^tags]" | sed 's/ origin\///'`; do 
    git branch $branch refs/remotes/origin/$branch; 
done 

# Convert SVN tags to GIT tags 
for tag in `git branch -r | grep "tags/" | sed 's/ tags\///'`; do 
    git tag -a -m"Converting SVN tags" $tag refs/remotes/$tag 
done 

Jetzt konnte ich alle meine Zweige sehen von git branch und Tags mit git tag --list

hinzufügen entfernten Ursprung ausgeführt wird, führen git push origin --all und git push origin --tags und du bist fertig.