2017-07-27 5 views
1

gitでパッチファイルを作成できるかどうかを知りたかったのですが、私はいくつかのファイルでいくつかの変更を行った場合、パッチファイルはファイル名に対して作成する必要があります。gitでパッチファイルを作成する

git diffはコンソールに変更を表示しますが、出力を別のファイルに出力することはできますか?

+0

データが限られているとはどういう意味ですか?それは私が通常パッチを作成する方法、またはgit diff master> filename.patchです。パッチを適用するときは、パッチの-p1 dj2

+0

Sorry my bad @ dj2 1つのファイルに正常に保存されますが、別のファイルに保存できます。たとえば、file1とfile2が変更された場合、file1.patchとfile2.patchを同じものに対して作成することができます。 – BeginnersSake

+0

なぜ個々のファイルにパッチを分割したいのですか? –

答えて

3

git format-patch

あなたがfoo.txtbar.txthello.txtを変更aaa111をコミット作った事があります。

git format-patch -1 aaa111

これは3つのファイルを変更を含むパッチを生成します。

git format-patch -1 aaa111 -- foo.txt

それはfoo.txtの変更のみを含むパッチを生成します。

git format-patch -1 aaa111 --stdout -- bar.txt > aaa111.bar.patch

これは、次のスクリプトは、最新に変更されたファイルのためのパッチをコミット作成bar.txt

+0

ありがとう@ElpieKayそれは働いた。 – BeginnersSake

+1

@ElpieKay '-1'が何を表しているのか(何をしているのか)を教えてください。私は 'git format-patch -h'をチェックしましたが、リストには載っていません。また、最近の3つのコミットのパッチを作成する場合、それぞれのファイルを1つのファイルにコミットするとどうなりますか?どうも。 – xpt

+2

@xpt '-h'はいくつかのオプションしかリストしていません。代わりに、 'git format-patch --help'か' man git format-patch'を使用してください。 '-1'は' - 'のインスタンスで、" コミットの最上位からパッチを準備します "。 '-1'がなければ、' aaa111'から到達可能な全てのコミットのパッチを作成します。 '-1'を指定すると、' aaa111'のパッチだけが作成されます。したがって、 'git format-patch -3'では、最近の3つのコミットのためのパッチを作成します。 ' -'は '-n'とは異なることに注意してください。どちらも 'git format-patch'のオプションです。 – ElpieKay

1

の変更のみ(HEAD~1)が含まれaaa111.bar.patchという名前のパッチを生成します。

# Enumerate the files modified on the desired commit 
for file in $(git diff --name-only HEAD~1); do 
    # Generate the name of the patch file: replac '/' with '_' 
    # in the paths of the modified files and add the .patch termination 
    patch=${file//\//_}.patch 
    # Create one patch for each modified file 
    git diff HEAD~1 -- $file > $patch 
done 

パスを含むようにパッチファイル名の生成を変更することができます(カレントディレクトリに生成しない)。また、異なるコミット間でdiffを生成するには、両方の場所のHEAD~1を適切なコミット識別子で置き換えます。

関連する問題