SVN diffをGitに適用する方法は?
-
20-08-2019 - |
質問
プロジェクトは2つのリポジトリにあります。 SVNの下の1つとGitの下の1つ。 SVNで何かを変更するたびに、Gitリポジトリにも同じことをしたいです。
SVNリポジトリに変更を加えて、リビジョン125を作成するとします。これらの同じ変更をGitリポジトリに適用するにはどうすればよいですか(Gitリポジトリがリビジョン124で最新の場合)。
ありがとう。
解決
私が実際にやった/探していたのは:
cd /path/to/svn/repo
svn diff -r 125 > /tmp/patch.diff
cd /path/to/git/repo
patch -p0 < /tmp/patch.diff
他のヒント
試してください:
svn diff | patch -d /path/to/git/repo -p0
特定のリビジョンの差分をエクスポートする場合は、svn help diff
を参照してください。
なぜgit-svnのような人はいないのですか?誰もそれを知らないとは思いません。
git-svn(およびgit-hgおよびgit-cvsおよびgit-bzr afaict)があります。少なくともgit-svnを使用すると、簡単に実行できます
git svn clone --stdlayout http://myrepo/root here
-s(--stdlayout
)を使用すると、標準のtrunk / branchs / tags / layoutが想定されますが、どの方法(man git-svn
)でも構いません。
マッピングは双方向であるため、ネイティブ(git)リモートと同様にプッシュおよびプルできます。質問なし。
SVNでパッチを生成し、後でGitで適用する場合は、 --git
コマンドラインオプション:
svn diff --git -r 125 > /tmp/patch.diff
人気のあるGit分散バージョン管理との相互互換性のために設計されたsvn diffの特別な出力モードを有効にします システム。
たとえば、実行
<=>
上記のパッチを使用するほかに、コミット後のフックにより、新しいものをコミットするたびにこれを行う必要がなくなります。
以下は私のために働いた。
最初に、パッチの変更点を確認します。これはgit applyで簡単に行えます
git apply --stat fix_empty_poster.patch
このコマンドはパッチを適用しませんしないことに注意してください。しかし、それが何をするかについての統計のみを表示します<!>#8217; ll。お気に入りのエディターでパッチファイルを覗いた後、実際の変更内容を確認できます。
次に、あなたは<!>#8217;パッチがどれほど面倒になるか興味があります。 Gitでは、実際に適用する前にパッチをテストできます。
git apply --check fix_empty_poster.patch
エラーが発生しない場合<!>#8217; t、パッチはきれいに適用できます <!>#128512;。そうしないと、どのようなトラブルが発生するかがわかります<!>#8217;
パッチを適用するには、I <!>#8217; git applyの代わりにgit amを使用します。これは、git amを使用すると、適用されたパッチをサインオフできるためです。これは、後の参照に役立つ場合があります。
git am --signoff < fix_empty_poster.patch
Applying: Added specs to test empty poster URL behaviour
Applying: Added poster URL as part of cli output
さて、パッチはきれいに適用され、マスターブランチが更新されました。もちろん、テストを再度実行して、何も壊れていないことを確認します。
gitログで、<!>#8217;コミットメッセージに<!>#8220; Signed-off-by <!>#8221;が含まれていることがわかります。タグ。このタグはGithubなどによって読み込まれ、コミットがコード内でどのように終了したかについての有用な情報を提供します。