0

次のように構成された古いSVNリポジトリから新しいgitリポジトリを作成しようとしています。

/root
    trunk
    build_scripts
    packager
    0.1.0
    0.1.1
    0.1.2
    ...etc...

0.xは明らかに伝統的にtagsディレクトリにあり、trunk保持する必要のあるソフトウェアのパッケージ化されたリリースを表すソフトウェアのリリースです。他の2つは、パッケージ化とテスト用のサポートスクリプトです。

それは主に私がリポジトリに対してコミットしただけでした-各リリースはsvn copyコマンドで作成されただけです。

ベストプラクティスではないかもしれませんが、開発は簡単です。ビルド環境をチェックし、その後、トランクをチェックして作業します。パッケージングスクリプトは新しいタグをコピーし、準備ができたらダウンロード可能なパッケージを作成します。

これをクリーンアップしてgitリポジトリに取り込むにはどうすればよいですか?理想的には、ベストプラクティスを使用し、すべての履歴を保持したいと思います。

私は使用してみましたsvn2git

svn2git path-to-repo --trunk trunk --nobranches --authors=/path/to/authors.txt

リポジトリにトランクが表示されますが、タグが表示されません(git tag何も表示されません)。また、他のスクリプトも持ってくるのが理想的です。

GITを使用する主な目的は、開発方法です。テストマシンから離れた場所での開発に行き詰まり、バグを修正してからさらに上流にプッシュできるテストリポジトリにコミットしたい場合があります。今、私は壊れたものを中央のSVNリポジトリにコミットし、テストマシンでチェックアウトします。それは明らかにひどいです。

必要に応じて、SVNリポジトリのクリーンアップに時間を費やすことができてうれしいです。まだそれを捨てる準備ができていません。

4

1 に答える 1

2

SVN リポジトリをクリーンアップしても役に立ちません。既存のリビジョンのディレクトリを移動することはできず、それをインポートすることになるからです。

の経験はありませんがsvn2gitgit svn単純に次のようにします。

  • トランクのみを初期化します。

    git svn init -A /path/to/authors.txt --prefix=svn/ -t trunk url://to/svn/root
    
  • 次のように svn セクションを手動で編集して、インポートしたいタグとブランチを手動でリストします。

    [svn-remote "svn"]
    url = url://to/svn/root
    fetch = trunk:refs/remotes/svn/trunk
    fetch = build_scripts:refs/remotes/svn/build_scripts
    fetch = packager:refs/remotes/svn/packager
    tags = 0.*:refs/remotes/svn/tags/0.*
    

    タグ行が機能するかどうかは完全にはわかりません。そうでない場合は、常にすべての既存のタグを明示的にリストできます。

  • git svn fetchすべての設定が完了したら実行します

残念ながら、svn リポジトリに新しいブランチが作成された場合、git にフェッチする前に一致するパターンを追加する必要があります。git-svn がすでにリビジョンをフェッチし、パターンがないためにブランチを作成しなかった場合、ブランチに戻ることはできず、新しいリビジョンのみをインポートします。そして、それらのブランチを再フェッチするように指示する方法が見つかりませんでした。

于 2013-01-18T08:12:22.650 に答える