2009-09-14 10 views
3

にGitリポジトリをエクスポート/ Gitのリポジトリのルートにコミットします。 Sは標準レイアウト(ブランチ/タグ/トランク)で初期化されており、Gはこれまでの開発履歴を持っています。私はGoogle Open Source Blogのアドバイスに従って、どのように輸出が行われるかを詳しく説明しました。GSが働いています。基本的にはブログが一時にGをフェッチ、空のディレクトリにのgit - のsvnクローンSに推奨しています。そしてrebaseが "マスター"して2番目のGitリポジトリ(G')になるということです。は、私はSVNリポジトリ(<strong>S</strong>)にGitのリポジトリ(<strong>G</strong>)をエクスポートしたいSubversionの

私は、ソース管理下にないファイルも、元のソースにはないブランチも放棄したくありません。だから、私はG 'と一緒に仕事をしたくないのですが、Gと一緒に仕事を続けたいと思っています。レイアウトコミットを表す新しいコミットを取り戻す方法はありますかSマージG 'G(もちろん共通の祖先はありません)を試みることに成功しませんでした。

+0

良い質問ですが、私はgitを使用して、同時にsvnと統合する方法を習得しようとしています。 – Jacob

答えて

3

あなたはが、親としての両方のコミットを持っているように見えます「祖先を無視して、それがGの木使用コミット作成することによってgit merge --strategy=ours、すなわちを使用してG」をGをマージすることができるはずです。履歴には各コミットの2つのコピーが含まれるため、結果は少し醜いでしょうが、Gをシームレスに作業できるはずです。

+0

私はもっと良いものを望んでいました。 [1]に従うと、履歴は完全に保存されます。さらに必要なのは、git-svnが* S *を認識する必要がある単一のコミットだけです。 gitツールキットの豊富さを前提として、これを私の履歴に追加することは可能です。 – yawn

+0

コミットのアイデンティティは親の身元に依存するため、前置きは厳密には不可能です。私が考えることができる唯一の方法は、_ALL_他のブランチをSにリベースすることです。 – legoscia

+0

ベストエフォートのために受け入れられます:-) – yawn

2

最初のコミットを追加する方が簡単かどうかはわかりませんが、SVNレイアウトが最初から存在していたかのように見えるようにするのは簡単です。

あなたはすべてのファイルがコミット最初から始めて、SVN「トランク」ディレクトリの下に存在するように、歴史を書き換えるgit filter-branchを使用することができます:あなたは同様にタグとブランチのディレクトリにファイルを移動することができ

git filter-branch --tree-filter 'mkdir trunk; git ls-files | xargs -I {} mv {} trunk' 

あなたが望むのであれば、どのファイルをどこに移動するかは、ブランチの目的や履歴にタグを追加したいときにどのように決定するのでしょうか。

+0

非常に興味深い!私はこの最初のことを朝にしよう! – yawn

+0

私はあなたの答えを正しく読まなかった - 私が本当に後ろにあるのは、レイアウト自体ではなく、git-svnの初期レイアウトを表すコミットです。それにもかかわらず、フィルタブランチに対して+1。 – yawn

+0

@yawn:なぜ単にSVN stdを作成しないのですか?レイアウトを新しい(そうでなければ空の)Gitリポジトリにコミットして(それをrepo "T"と呼ぶ)、TのマスターをあなたのGにフェッチしてください。そしてGで、FETCH_HEADのマスタを削除しますか?あなたが保持したいと思っているGの他のブランチと、新しい "初期"コミットから降下した場合、あなたはリベースする必要があります(ブランチごとに、元のベースに対応する新しいコミットを見つける必要があります)。しかし、支店)。 –

関連する問題