2013-04-13 3 views
34

Я пытался делатьмерзавца создать патч с диффом

git diff 13.1_dev sale_edit > patch.diff 

Затем я попытался сделать git apply patch.diff в другой ветке, но я патч не применяется. Как создать файлы патчей из diff, которые я могу использовать с git?

Ошибки получили:

$ git apply --ignore-space-change --ignore-whitespace diff.diff 
diff.diff:9: trailing whitespace. 

diff.diff:10: trailing whitespace. 
    function set_change_sale_date() 
diff.diff:12: space before tab in indent. 
     $this->sale_lib->set_change_sale_date($this->input->post('change_sale_date')); 
diff.diff:14: trailing whitespace. 

diff.diff:15: trailing whitespace. 
    function set_change_sale_date_enable() 
warning: application/controllers/sales.php has type 100755, expected 100644 
error: patch failed: application/controllers/sales.php:520 
error: application/controllers/sales.php: patch does not apply 
warning: application/language/english/sales_lang.php has type 100755, expected 100644 
error: patch failed: application/language/english/sales_lang.php:134 
error: application/language/english/sales_lang.php: patch does not apply 
warning: application/libraries/Sale_lib.php has type 100755, expected 100644 
error: patch failed: application/models/sale.php:170 
error: application/models/sale.php: patch does not apply 
warning: application/views/sales/register.php has type 100755, expected 100644 
error: patch failed: application/views/sales/register.php:361 
error: application/views/sales/register.php: patch does not apply 

Я пытаюсь это на Mac

+1

Git - неправильный инструмент для работы. Вы можете потратить часы, пытаясь применить патч, потому что Git не обрабатывает пробелы и окончания строк правильно. Я однажды потратил более часа, пытаясь применить трехстрочный патч, отправленный мне по электронной почте (также см. [Применить патч к файлу, который находится под Git без использования Git?] (Http://stackoverflow.com/q/35353267)) , Используйте программу 'patch'. Он обрабатывает пробелы и концы строк, не разбивая себя. – jww

ответ

21

Попробуйте:

git apply --ignore-space-change --ignore-whitespace patch.diff 

Как уже упоминалось в "git: patch does not apply", это может быть вызвано следующими причинами:

  • линия концы diff между локальной файловой системой и удаленным репо.
    Пользователь core.eol в .gitattributes файле хороший подход (см «git force file encoding on commit»)
  • бит исполнения («x»).
    Это может привести к установке git config core.filemode false, а затем git reset --hard HEAD (убедитесь, что у вас нет незавершенных изменений или они будут потеряны).
+0

Можете ли вы дать больше информации о бите исполнителя? – stdcall

+0

@Mellowcandle подробности находятся на http://stackoverflow.com/a/4770223/6309 – VonC

+0

Он по-прежнему не применяется. См. Обновленный вопрос –

1

Здесь вы должны попробовать это с веткой, с которой вы сталкиваетесь.

git diff 13.1_dev sale_edit > patch.diff yourBranch() 
10

Вы можете применить патч, как 3-полосное слияние:

git diff 13.1_dev sale_edit > patch.diff 
git apply -3 patch.diff 

Это должно вызвать конфликт, так что вы можете решить вручную. Или вы могли бы пойти с однострочником, обжигающе патч к мерзавцу применить непосредственно:

git diff 13.1_dev sale_edit | git apply -3 

Чтобы изменить патч:

git diff 13.1_dev sale_edit | git apply -3 -R 

(примечание: это же, как и выше команды, без двухступенчатого процесса создания патч-файл)

git help apply 

-3, --3way   
When the patch does not apply cleanly, fall back on 3-way merge if 
the patch records the identity of blobs it is supposed to apply to, 
and we have those blobs available locally, possibly leaving 
the conflict markers in the files in the working tree for the user 
to resolve... 
1

с мерзавца версии 1.9.1, я вижу подобные жалобы при использовании «мерзавец применить», чтобы применить патч, созданный с помощью «Git различий».

Кажется, что 1.9.1 git имеет проблему со смешением пробелов & вкладки в файле исправления.

warning: squelched 1 whitespace error warning: 6 lines add whitespace errors.

@ ответ VonC не помогает, и я все еще получаю то же предупреждение.

Самое простое решение - просто использовать команду «patch», которая успешно применяет все изменения, внесенные в вывод «git diff» в целевой каталог git.

$ patch --version GNU patch 2.7.1

+0

Интересное использование командного патча. +1 – VonC

Смежные вопросы