При исправлении какой разницы между аргументами -p0 и -p1?

В чем разница между patch -p0 и patch -p1

Есть ли вообще разница?

16 голосов | спросил chrisjlee 10 SatEurope/Moscow2011-12-10T02:45:47+04:00Europe/Moscow12bEurope/MoscowSat, 10 Dec 2011 02:45:47 +0400 2011, 02:45:47

3 ответа


21

Самый распространенный способ создания патча - запустить команду diff или встроенный diff -like. Иногда вы просто сравниваете два файла, и вы запускаете diff следующим образом:

diff -u version_by_alice.txt version_by_bob.txt >alice_to_bob.patch

Затем вы получаете патч, который содержит изменения для одного файла и вообще не содержит имени файла. Когда вы применяете этот патч, вам нужно указать, к какому файлу вы хотите применить его:

patch <alice_to_bob.patch version2_by_alice.txt

Часто вы сравниваете две версии проекта с несколькими файлами, содержащиеся в каталоге. Типичный вызов diff выглядит следующим образом:

diff -ru old_version new_version >some.patch

Затем патч содержит имена файлов, указанные в строках заголовка, например diff -ru old_version/dir/file new_version/dir/file. Вы должны указать patch, чтобы удалить префикс (old_version или new_version) из имени файла. Вот что означает -p1: разделите один уровень каталога.

Иногда строки заголовка в патче содержат имя файла напрямую без каких-либо указаний. Это характерно для систем контроля версий; например cvs diff создает строки заголовков, которые выглядят как diff -r1.42 foo. Тогда нет префикса для полосы, поэтому вы должны указать -p0.

В специальном случае, когда нет подкаталогов в деревьях, которые вы сравниваете, необязательный параметр -p: patch будет отбрасывать всю часть каталога имен файлов. Но большую часть времени вам нужно либо -p0, либо -p1, в зависимости от того, как был создан патч.

ответил Gilles 10 SatEurope/Moscow2011-12-10T03:19:56+04:00Europe/Moscow12bEurope/MoscowSat, 10 Dec 2011 03:19:56 +0400 2011, 03:19:56
16

От человека:

  

-pnum или --strip=num       Разделите самый маленький префикс, содержащий число ведущих косых черт от каждого       имя файла, найденное в файле исправления. Последовательность одного или нескольких смежных       косые черты считаются одной косой чертой. Это определяет, как файл       имена, найденные в файле исправления, рассматриваются, если вы       файлы в другом каталоге, кроме человека, который отправил       патч.        Например, предположим, что имя файла в файле исправления:

 /u/howard/src/blurfl/blurfl.c
     

настройка -p0 дает полное имя файла без изменений , -p1 дает

 u/howard/src/blurfl/blurfl.c
     

без косой черты , -p4 дает

 blurfl/blurfl.c
ответил Stéphane Gimenez 10 SatEurope/Moscow2011-12-10T03:03:16+04:00Europe/Moscow12bEurope/MoscowSat, 10 Dec 2011 03:03:16 +0400 2011, 03:03:16
3

Я объясню примеры и закончу запиской.

Скажем, у нас есть путь с тремя сокращениями:

/George/W/Bush

запуск патча на нем с аргументом -p0 будет проходить по пути, как он есть, немодифицирован:

/George/W/Bush

-p1 удалит косую черту (обратите внимание, что теперь это просто Джордж, без косой черты слева):

George/W/Bush

-p2 удалит Джордж (и смежную правую косую черту):

 W/Bush

-p3 удалит W (и смежную правую косую черту):

 Bush
ответил JohnDoea 13 J000000Wednesday16 2016, 15:59:48

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132