私はa
とb
の2つのファイルを持っています。git applyが古いファイルを削除しないようにする
git diff a b > test.patch
今パッチを適用する場合、a
ファイルが削除されています:
git apply test.patch
は、パッチを作成したり適用するときに、ファイルを削除するからgitのを防ぐ方法はありますか?私はこのようなパッチを作成しますか
私はa
とb
の2つのファイルを持っています。git applyが古いファイルを削除しないようにする
git diff a b > test.patch
今パッチを適用する場合、a
ファイルが削除されています:
git apply test.patch
は、パッチを作成したり適用するときに、ファイルを削除するからgitのを防ぐ方法はありますか?私はこのようなパッチを作成しますか
git diff
の使用状況の構文は--no-index
が暗黙のうちに想定している、あなたの場合は
git diff [--no-index] <path> <path>
です。そのため、コマンド
git diff a b
はb
は、ファイルa
の新しいバージョンであることを前提としています。あなたのコマンドを実行すると、次のようになりますパッチを生成します。
$ git diff --no-index 123.txt 456.txt
diff --git a/123.txt b/456.txt
index 97f93f4..9fa0bac 100644
--- a/123.txt
+++ b/456.txt
@@ -1 +1 @@
-123.txt
+456.txt
あなたが2つの以上のファイルでこれを行うにしようとすると、エラーがあります:
$ git diff -- 123.txt 456.txt 789.txt
Not a git repository
To compare two paths outside a working tree:
usage: git diff [--no-index] <path> <path>
$ git diff --no-index 123.txt 456.txt 789.txt
usage: git diff --no-index <path> <path>
回避策の一つ(あなたが作成したいと仮定するとa
とb
の両方が追加されたパッチ)は、一時ディレクトリに新しいgit repoを作成することになります。あなたは
git commit --allow-empty -m "Initial"
を使用していないファイルをコミットしたファイルにでa
とb
をコピー初期を作成することができ
をgit add --all
を実行した後、git diff --staged > test.patch
このような適切なパッチ、作成されます:。
diff --git a/123.txt b/123.txt
new file mode 100644
index 0000000..97f93f4
--- /dev/null
+++ b/123.txt
@@ -0,0 +1 @@
+123.txt
diff --git a/456.txt b/456.txt
new file mode 100644
index 0000000..9fa0bac
--- /dev/null
+++ b/456.txt
@@ -0,0 +1 @@
+456.txt
diff --git a/789.txt b/789.txt
new file mode 100644
index 0000000..a25ef22
--- /dev/null
+++ b/789.txt
@@ -0,0 +1 @@
+789.txt
これは私の特定の質問のための適切な答えと思われますが、将来の訪問者は 'git diff ab'を使ってパッチを作成することを考慮すべきですが、それを適用する通常のパッチツールです:' patch -p1 -f --dry-run
をパッチを適用する前後の 'git status'の出力は何ですか? – rlee827
@ rlee827私はリポジトリ内でこれをやっていません。 – timakro