2016-11-24 8 views
2

У меня есть два файла a и b, каждый из которых содержит их имя. Я создаю патч, как это:Предотвратить git от удаления старых файлов

git diff a b > test.patch 

Теперь при применении патча файл a удаляются:

git apply test.patch 

Есть ли способ, чтобы предотвратить ублюдок от удаления файла при создании или применения патча?

+0

Каков результат 'git status' до и после применения патча? – rlee827

+0

@ rlee827 Я не делаю этого внутри репозитория. – timakro

ответ

0

Синтаксис для использования git diff является

git diff [--no-index] <path> <path> 

В вашем случае --no-index предполагается неявно. Таким образом, команда

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-репо во временном каталоге. . Вы можете создать первоначальный коммита файлы не используя

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

Это, кажется, правильный ответ на мой конкретный вопрос, хотя будущим посетителям следует рассмотреть возможность использования 'git diff ab' для создания патча, но обычный инструмент исправления для его применения:' patch -p1 -f -dry-run timakro