2016-08-09 5 views
0

私はgit svn clone --stdlayoutを使ってSVNリポジトリをクローンしました。リポジトリのクローンを作成した後、私はatlassian migration script使用してそれをクリーンアップ:git fetch -p originを実行した後、クローンされたSVNリポジトリのすべてのブランチをGITが削除するのはなぜですか?

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

は、その後、私は新しいリモート設定と私もいくつかのより多くのクリーンアップしようとした後git push --all origin

を使用して、新しいリモートGITサーバにリポジトリをプッシュgit fetch -p originを走ったが、それは、すべて元SVNの枝削除:

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

がクローン化されたSVNリポジトリのため、この正常ですか?元のSVNブランチは、新しいGITリポジトリの実際のブランチではないようです。移行プロセス中に何か忘れましたか? pruneコマンドは元に戻すのが非常に難しいようです。もし私たちが将来似たような命令を(おそらく偶然によって)実行するならば、私たちがこれらの枝を失わないようにするにはどうすればよいでしょうか?

答えて

0

実際に私のSVNブランチは実際のGITブランチに変換されませんでした。だから、リモートブランチがもはや到達できないSVNリポジトリを指しているところで私が見た唯一のブランチです。したがって、プルーンを実行すると、すべての私の支店が削除されました。

ほとんどのsvn-git移行チュートリアル(git-bookを含む)とツールでは、クローンされたレポにcp -Rf .git/refs/remotes/origin/* .git/refs/heads/を実行することで実際のgitブランチを作成できると仮定しています。しかし、私の場合、ブランチは特別な 'svn'ディレクトリにあります:.git\svn\refs\remotes\origin

私は次のように私はオンラインで見つけるいくつかのbashスクリプトを修正:

# 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 

今、私はgit push origin --allgit push origin --tagsを実行して、リモートの起源を追加git tag --list

git branchとタグを実行して、すべての私の枝を見ることができましたあなたは終わった。

関連する問題