質問

プロジェクトは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でパッチを作成して適用するには

最初に、パッチの変更点を確認します。これは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などによって読み込まれ、コミットがコード内でどのように終了したかについての有用な情報を提供します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top