99

git format-patchで作成されたパッチをsvn互換にして、svnリポジトリに送信できるようにする方法はありますか?

githubでsvnリポジトリを処理していて、変更をメインリポジトリに送信したいと思っています。これを行うにはパッチを作成する必要がありますが、パッチがsvnとは異なるgit形式であるため、パッチを適用できません。まだ発見していない秘密はありますか?

更新:現在、これを行うためのスクリプトまたはネイティブgitの方法はありませんが、手動でこれを実行する方法について、今年の初めから投稿を見つけることができました。私は指示に従い、gitパッチをsvnで動作させることに成功しました。

誰かがこれを達成し、gitプロジェクトに貢献するためのスクリプトを書くことに挑戦することができれば、私は誰もが大いに感謝されるでしょう。

http://kerneltrap.org/mailarchive/git/2008/1/15/570308/thread#mid-570308

4

8 に答える 8

97

私はいつもこれをグーグルで検索する必要がありますが、(私にとって)完全に機能することがわかった方法は次のとおりです。

  • でパッチを作成します。git diff --no-prefix master..branch > somefile.diffマスターとブランチの部分はオプションであり、差分を取得する方法によって異なります。
  • どこにでも送信し、 で申請しpatch -p0 < somefile.diffます。

私にとっては常にうまくいくようで、私が出会った中で最も簡単な方法のようです。

于 2012-11-14T11:01:21.933 に答える
21

簡単な答えはpatch -p1 -i {patch.file}です。

詳細については、このブログを参照してください:gitを使用したSubversionパッチの作成

于 2012-03-24T13:38:51.060 に答える
17

最新のsvnチェンジセットと指定されたコミットに対してdiffを作成するためのヘルパースクリプトは次のとおりです。http: //www.mail-archive.com/dev@trafficserver.apache.org/msg00864.html

#!/bin/sh
#
# git-svn-diff
# Generate an SVN-compatible diff against the tip of the tracking branch
TRACKING_BRANCH=`git config --get svn-remote.svn.fetch | sed -e 's/.*:refs\/remotes\///'`
REV=`git svn find-rev $(git rev-list --date-order --max-count=1 $TRACKING_BRANCH)`
git diff --no-prefix $(git rev-list --date-order --max-count=1 $TRACKING_BRANCH) $* |
sed -e "s/^+++ .*/&    (working copy)/" -e "s/^--- .*/&    (revision $REV)/" \
-e "s/^diff --git [^[:space:]]*/Index:/" \
-e "s/^index.*/===================================================================/"
于 2010-11-29T21:16:15.120 に答える
10

Subversion < 1.6 にはパッチ サポートがありません。Subversion 1.7 ではパッチを適用できるようになり、統合差分への git/hg 拡張機能が TODO リストに含まれるようです。

于 2009-12-22T14:20:55.267 に答える
0

git bash を実行して、変更がコミットされ、ローカルの git ブランチにリベースされていることを確認します。

git show --pretty >> myChangesFile.patch

于 2013-04-23T21:31:16.133 に答える