2011-08-08 20 views
0

私はCVS用にsvnを使用し、約5-6ヶ月前にtrunkからversion_1_9_1ブランチをフォークしました。今私はそれらをマージする必要があります。 「svnブランチのGITマージでBASEファイルが生成されない

git svn clone -s hxxp://svn/repo/project project (this takes avout 20min for +30k commmits) 
git checkout -b version_1.9.1 remotes/version_1_9_1 
git checkout -b the_trunk trunk 
git merge version_1.9.1 

が、私はやるとき:SVNで私の負担を軽減するために

は、私がマージするためにgitを試してみたかったので、私はで指示に従った:私は、次のコマンドを使用して終了 http://blog.wuwon.id.au/2010/09/painless-merge-conflict-resolution-in.html

git mergetool 'は、web.xmlファイルを作成すると、meldはLOCALとREMOTEのダイアログを開きますが、BASEファイルはありません。

メルドダイアログが開いたままですが、そこにあるどのファイルをチェックし、次のリストを取得:

web.xml 
web.xml.BACKUP.12480.xml 
web.xml.LOCAL.12480.xml 
web.xml.REMOTE.12480.xml 

だから、私の理解のためにもweb.xml.BASE.12480.xmlそこに呼ばれるファイルである必要がありますが、しかし欠けている。

diff3が有効化または無効化されても結果は同じです。

このだから私はクリーンなディレクトリで次のコマンドを実行する...クローニングに何か問題があることを考えるように私を導く:

git svn clone -s hxxp://svn/repo/project project 
gitk 
git checkout -b version_1.9.1 remotes/version_1_9_1 
gitk 
git checkout -b the_trunk trunk 
gitk 

(。Ubuntuの11.04でこれをやっところでイム)

各私はgitkを走った時、私はすべてのsvnコミットが別のものであるフラットな "階層"を見ます。だから私がこれを正しく理解していれば、 "git svn clone"に何か問題があります.gitはトランクとブランチの共通の祖先version_1.9.1を見つけることができないからです。

誰でもこの問題で正しい方向に向けることができますか?

読んでいただきありがとうございます。

答えて

0

問題はsvnブランチで発生しました。それはトランクから分岐して、それらの間に接続がないようにしました。

私が使用していることを確認するには、次の

$ git svn clone -s hxxp://svn/repo/project project 
$ git checkout -b the_trunk remotes/trunk 
$ git checkout -b version_1.9.1 remotes/version_1_9_1 
$ git branch 
    master 
    the_trunk 
    version_1.9.1 
$ git merge-base the_trunk version_1.9.1 

をマージベースは、これら二つの枝は何の関係もなかったことを告げるものを、印刷didntの。

この問題を解決する方法はたくさんあると思います。 gitのと非常に新しいイムので、私は潜在的なGITSを使用するには、任意の巧妙な方法を考え出すことができなかったので、私は一種の強引なやり方行ってきました:

  1. を私は最後version_1_9_1がフォークされた場所からトランクにコミット検索。
  2. が真剣にマージの競合(と
  3. た楽しさをトランクに
  4. がそれをマージversion_1_9_1内容で、この新鮮なブランチからのすべてのコンテンツを置き換え、その時点から新たにgitのブランチを作成し、それがどのようなSVNよりもそんなに多くは簡単でした提供していただろう)。

以下は上記の5つのステップを行うためのコマンドです:すべてのオーバー

$ gitk <= to find git revision id of forked commit, lets say its 97bc8071-70e0-0310-82d1-dfb2d704a1b1 
$ git checkout the_trunk 
$ git branch fake_version_1.9.1 97bc8071-70e0-0310-82d1-dfb2d704a1b1 
$ git checkout version_1.9.1 
$ mkdir ../temp 
$ cp -r projectfiles ../temp  <= remember not to copy .git directory 
$ git checkout fake_version_1.9.1 
$ rm -r projectfiles 
$ cp -r ../temp/* . 
$ git commit -a 
$ git checkout the_trunk 
$ git merge fake_version_1.9.1 
$ git mergetool  <= google "git mergetool" for instruction to setup tool for conflicts, I used p4merge 
$ git commit -a 
$ git svn dcommit 

、私はこのマージと非常に幸せでした。これらの2つのブランチが互いに接続されていないことが分かったので、git mergeが.BASEファイルを生成するのを妨げました。マージがはるかに簡単にGitが.BASEファイルを生成することができ生成偽の枝、: 総ファイルが変更さ:390個のファイル

は、偽の枝せずに競合をマージ:220個のファイルが 対 は、偽の枝との競合をマージ:68個のファイルを

また、スロウグ全体のマージを行った後、私は偽のブランチなしでマージすることも可能でした - 少なくともいくつかの合理的な時間枠で少なくとも不思議に思った。

読んでいただきありがとうございます。

関連する問題