0

プロジェクトで svn から git に切り替える過程にあります。

ここで、移動したい svn リポジトリの 1 つに、保持したい非常に長い履歴があります。だから私はそれで git-svn clone をやってみましたが、うまくいきました。

ただし、svn リポジトリはその歴史の中で 3 回移動されています。

リポジトリ全体のレイアウトは次のようになります。

repo_root/
trunk/
    projA_v1 (existed in the beginning)
    projA_v2 (then moved to v2)
    projA_v3 (and finally to v3)
    projB
    projC
branches/
    projA_b1
    projA_b2
    projB_b1
    projC_b1
tags/
    projA_t1
    projB_t1
    projC_t1

このプロジェクトは、最初は projA_v1 と呼ばれ、次に v2 に移行し、最後に v3 に移行しました。

git-svn clone を実行すると、2 から 3 への最後の移動以降の履歴のみが取得されます。svn でログを確認すると、履歴全体が正しく表示されます。

履歴全体を取得するためにできることはありますか? そこには約 3 年間の失われた歴史があります。

更新: から、リポジトリ全体で git-svn clone を実行しようとしましたrepo_root。私はそれを行うことができると思ったし、Detach (move) subdirectory into separate Git repositoryの指示に従って、結果の git リポジトリをプルーニングすると、うまくいくようです。(少なくとも剪定ビット)

しかし、まだ問題があります。ブランチは正しく動作しません.ブランチの1つのコンテンツはトランク全体のコピーではなく、トランクの一部にすぎないため、git-svnがそれらをブランチとして認識しないためだと思います. 何か案は?

理想的な世界では、projA_v1 と v2 からの履歴、および projA ブランチとタグの履歴を含む、projA のみで構成されるレポになります。

4

1 に答える 1

1

私は自分に合った方法を見つけましたが、それは非常に「一般的ではない」ので、ここに投稿するのをためらっています...

私がうまくいっ.git/configたのは、プロジェクトが移動されたときに編集することでした。移動しgit svn fetch -rたリビジョンに対して行い、構成を編集しました。

私の場合、プロジェクトはトランク/v2 からブランチ/v3、さらにトランク/v3 に移動しましたが、最後の移動が私にとって最も問題でした。ブランチ/v3 からトランク/v3 への移動がブランチのように見えるように、config でトランクとブランチを反転させました。それから私はすべての歴史を手に入れました。

--ignore-paths=""そして、同じレベルの他のすべてのプロジェクトでかなり長い時間を費やさなければなりませんでした。

このアプローチが他のケースでは機能しないと思いますが、config他のすべてが失敗した場合は変更を検討することをお勧めします.

于 2013-04-23T18:29:34.157 に答える