2011-02-11 5 views
8

私はナッツをやっていますか、誰もこの機能が好きではありませんでしたが、ずっと前は私はsourceforgeシステムでSubversionを使用していました。私は、完了したコミットの完全なファイルパッチを作成する能力を持っていました。Gitは完全なファイルパッチを作成してダウンロード/配布しますか?

私はこれらのファイルをgitで作成することはできません。私が望むのは、XX commitから変更されたファイルと完全にそれらのファイルのみです。ロケーション。

現在のところ、変更されたことを私には何も教えてくれないので、私はプロジェクト全体を再アップロードしていません。私たちは共有Webホスト上にいるので、より高価なパッケージにアップグレードすることなくサーバー上でgitを入手する方法はありません。

私はうまくジップにすべてをかける

git archive --output=/home/username/temp.zip <commit id> 

を試みたが、それはちょうどそれをやった、それがすべてをかけます。また、format-patchのバリエーションを試しましたが、うまくいかなかったようです。

答えて

14

私はあなたが私の他の答えに欲しかったものを誤解したようです。あなたができるようgit archiveは、アーカイブに含まれるパスのリストを取ることができます。

git archive -o /tmp/foo.zip HEAD $(git diff --name-only oldcommit HEAD) 

をあなたのファイル名が意外な文字が含まれている場合は、しかし、それを行うために、より安全になります:それはまだだけ

git diff -z --name-only oldcommit HEAD | xargs -0 git archive HEAD -o /tmp/blah.zip -- 
+0

ありがとう、これは働いた。私の場合は、コミットの代わりにブランチをもう一度必要としました。だから私はそうしました: 'git diff -z --name-only origin/branch_name | xargs -0 git archive HEAD -o/tmp/blah.zip'を実行し、それらの変更を私のrepo:tar -xf/tmp/blah.zip'ファイルに展開して適用しました。 – Surya

3

しようとする最初の事はあなたの状況に十分であるかもしれない、git diffの出力を保存するには、次のようになります。

git diff oldcommit > test.patch 

あなたはそれ以来、バイナリファイルを変更した場合、あなたは試みることができる:

git diff --binary oldcommit > test-with-binaries.patch 

この場合、git applyのパッチを適用する必要があります。それ以外の場合は、oldcommitに基づいて新しいブランチを作成し、masterからsquashed mergeを実行し、結果をコミットしてgit format-patchを使用してパッチを生成します。この方法(およびあなたの問題に対するいくつかの他の解決方法)については、この類似のstackoverflow質問への回答で詳しく説明しています:How do you squash commits into one patch with git format-patch?

+0

を変更されたセクションを出力する、私は全体のファイル全体が必要です。 config.incで2行を変更した場合、変更された行だけでなく、config.inc全体が必要になります。 – iarp

+0

@iarp:ああ、申し訳ありません。代わりに 'git archive'を使用する別の提案を追加しました。 –

関連する問題