2016-11-24 4 views
2

私はabの2つのファイルを持っています。git applyが古いファイルを削除しないようにする

git diff a b > test.patch 

今パッチを適用する場合、aファイルが削除されています:

git apply test.patch 

は、パッチを作成したり適用するときに、ファイルを削除するからgitのを防ぐ​​方法はありますか?私はこのようなパッチを作成しますか

+0

をパッチを適用する前後の 'git status'の出力は何ですか? – rlee827

+0

@ rlee827私はリポジトリ内でこれをやっていません。 – timakro

答えて

0

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> 

回避策の一つ(あなたが作成したいと仮定するとabの両方が追加されたパッチ)は、一時ディレクトリに新しいgit repoを作成することになります。あなたは

git commit --allow-empty -m "Initial" 

を使用していないファイルをコミットしたファイルにでabをコピー初期を作成することができ

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 
+0

これは私の特定の質問のための適切な答えと思われますが、将来の訪問者は 'git diff ab'を使ってパッチを作成することを考慮すべきですが、それを適用する通常のパッチツールです:' patch -p1 -f --dry-run timakro

関連する問題