web-dev-qa-db-ja.com

SVN diffをGitに適用する方法は?

私のプロジェクトは2つのリポジトリにあります。 1つはSVNの下に、もう1つはGitの下にあります。 SVNで何かを変更するときはいつでも、Gitリポジトリに対して同じことをしたいと思います。

SVNリポジトリに変更を加えて、リビジョン125を作成するとします。これらの同じ変更をGitリポジトリに適用するにはどうすればよいですか(私のGitリポジトリがリビジョン124で最新であると仮定)。

ありがとうございました。

48
Andriy Drozdyuk

私が実際に/探したのは:

cd /path/to/svn/repo
svn diff -r 125 > /tmp/patch.diff
cd /path/to/git/repo
patch -p0 < /tmp/patch.diff
49
Andriy Drozdyuk

試してください:

svn diff | patch -d /path/to/git/repo -p0

見る svn help diff特定のリビジョンの差分をエクスポートしたい場合。

18
MattJ

なぜgit-svnが好きではないのですか?誰もそれを知らないとは思いません。

Git-svn(とgit-hgとgit-cvsとgit-bzr afaict)があります。少なくともgit-svnを使えば簡単にできます

git svn clone --stdlayout http://myrepo/root here

-s(--stdlayout)は、標準のトランク/ブランチ/タグ/レイアウトを想定していますが、どの方法でも使用できます(man git-svn)。

マッピングは双方向であるため、ネイティブ(git)リモートと同じようにプッシュおよびプルできます。質問はありません。

5
sehe

SVNでパッチを生成し、後でGitで適用する場合は、必ず --gitコマンドラインオプション

--git

一般的なGit分散バージョン管理システムとの互換性のために設計されたsvn diffの特別な出力モードを有効にします。

たとえば、実行

svn diff --git -r 125 > /tmp/patch.diff

5
bahrep

上記のようにパッチを使用する以外に、 post-commitフック の設定を検討することもできます。そのため、何か新しいものをコミットするたびにこれを行う必要はありません。

2
Federico Builes

以下は私のために働いた。

ソース: Gitでパッチを作成して適用する方法

最初に、パッチの変更内容を確認します。これはgit applyで簡単に行えます

git apply --stat fix_empty_poster.patch

このコマンドはパッチを適用しませんが、パッチの適用に関する統計のみが表示されることに注意してください。お気に入りのエディターでパッチファイルを確認すると、実際の変更内容を確認できます。

次に、パッチがどれほど厄介になるかについて興味があります。 Gitでは、実際に適用する前にパッチをテストできます。

git apply --check fix_empty_poster.patch

エラーが発生しない場合は、パッチをきれいに適用できます????。そうしないと、どのような問題が発生するかがわかります。

パッチを適用するには、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ログでは、コミットメッセージに「Signed-off-by」タグが含まれていることがわかります。このタグはGithubなどによって読み取られ、コミットがコードでどのように終了したかに関する有用な情報を提供します。

0
Abhishek Bedi