私のプロジェクトは2つのリポジトリにあります。 1つはSVNの下に、もう1つはGitの下にあります。 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
)は、標準のトランク/ブランチ/タグ/レイアウトを想定していますが、どの方法でも使用できます(man git-svn
)。
マッピングは双方向であるため、ネイティブ(git)リモートと同じようにプッシュおよびプルできます。質問はありません。
SVNでパッチを生成し、後でGitで適用する場合は、必ず --git
コマンドラインオプション :
--git
一般的なGit分散バージョン管理システムとの互換性のために設計されたsvn diffの特別な出力モードを有効にします。
たとえば、実行
svn diff --git -r 125 > /tmp/patch.diff
上記のようにパッチを使用する以外に、 post-commitフック の設定を検討することもできます。そのため、何か新しいものをコミットするたびにこれを行う必要はありません。
以下は私のために働いた。
ソース: 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などによって読み取られ、コミットがコードでどのように終了したかに関する有用な情報を提供します。