2

大規模な(> 6500コミット)SubversionリポジトリをGitリポジトリに変換していますが、誰かが助けてくれることを期待しているいくつかの問題が発生しています。これが私がいるところです:

リモートリポジトリのローカルSubversionリポジトリバックアップを作成しました。私はこれを使用してそのリポジトリをGitに変換しています:

git svn clone svn://localhost/svn gitrepo –no-metadata -A authors-transform.txt -t tags -b branches -T trunk

これによりGitリポジトリが作成されますが、作成されると、コミット番号のように見えるいくつかの追加のブランチが作成されます。私は絶対にそれらがそこにいるつもりはありません。クローンから少しクリーンアップした後、私の「.git / refs /heads/」フォルダーは次のようになります。

branch1
branch1@6701
branch1@6736
branch2
branch3
branch4
master
trunk

git svn cloneがこれを行う理由はありますか?それらのコミットには、まったく新しいブランチを作成している可能性のあるものがありますか?

また、この新しく作成されたGitリポジトリをGitHubにプッシュする前に、マスターブランチとトランクブランチの両方を用意する必要がありますか?Git/GitHubが正確に何を探すのかわかりません。ありがとうございました!

4

1 に答える 1

2

私の記憶が正しければ、削除されたブランチに対してrefs / remotes / XXX@revブランチが作成されます。それらが作成されていないとします。その場合、refs / remotes / XXXブランチは存在しません(SVNで削除されたため)。次に、Gitは、対応する削除されたSVNブランチがどのGitブランチからも到達できないことをコミットするため、ガベージとして収集できます。refs / remotes/XXXとrefs/remotes / XXX @ revの両方が存在する場合は、ブランチが置き換えられたことを意味している可能性があります。しかし、残念ながら、私が知っているように、git-svnはブランチ置換のためのマージコミットを作成します。これは、履歴変換の観点からは絶対に間違っています。

代わりに、SVN-> Gitの移行については、2つの別のプロジェクトを見てください。1つ目は、SVNサーバーにアクセスできる場合に推奨されるSubGitです。置換を置換として処理し、マージをマージとして処理します。ただし、ignores、svn:eolスタイルのプロパティ(対応する.gitattributes値に)、タグなども変換します。

SVNサーバーにアクセスできない場合のもう1つの代替手段はSmartGitです。また、妥当な変換(マージからマージ、無視から無視)を提供しますが、svn:externalsをモジュールとして表示される.gitsvnextmodulesファイルに変換することもできます。

于 2012-05-19T01:03:36.307 に答える