Я новачок як в git, так і в контролі версій, тому я намагаюся розібратися, що таке патч і чим він відрізняється від решти діяльності, яку я займаюся в git?
Коли я наношу пластир? Чи трапляється це кожен раз, коли я вчиняю?
Я новачок як в git, так і в контролі версій, тому я намагаюся розібратися, що таке патч і чим він відрізняється від решти діяльності, яку я займаюся в git?
Коли я наношу пластир? Чи трапляється це кожен раз, коли я вчиняю?
Відповіді:
Ви можете побачити в цій публікації блогу, як можна створити виправлення (колекція змін, які потрібно зв’язати, та застосувати до іншого репо)
(малюнок із публікації в блозі 2008 року " Біорубі з git: як би це працювало? ", опублікований Ян AERTS )
Дивіться також Додавання до Rails with Git як іншого конкретного прикладу.
На сьогоднішній день запит на притягнення GitHub дуже просто застосувати патчі на репозиторіях GitHub, що корисно, коли ви не є прямим учасником (тобто ви не маєте права безпосередньо натискати на репо).
Насправді, зовсім недавно GitHub представив " Краще натягуйте запит електронної пошти ", щоб покращити сповіщення про нові виправлення.
Patch - це програма Unix, яка оновлює текстові файли відповідно до інструкцій, що містяться в окремому файлі, який називається патч-файлом.
Отже, іншими словами, це може означати файл з інструкціями або програма, яка обробляє цей файл і застосовує його до чогось.
Тепер, що таке файл виправлення? Скажімо, у вас є текстовий файл з 2 рядків:
This is line A.
This is line B, or otherwise #2.
Потім ви змінюєте перший рядок, і тепер ваш файл виглядає так:
This is SPARTA.
This is line B, or otherwise #2.
Як би ви описали зміну до вмісту файлу? Ви можете сказати, що перший рядок "Це рядок А." замінено на "Це SPARTA.", або навіть останнє слово "A" першого рядка замінено на інше слово "SPARTA". І це саме те , що диференціал говорить нам. Скажімо, у мене є дві версії цього файлу, одна називається file1.txt, а інша file2.txt, тоді я запускаю diff і отримую це:
$ diff -u file1.txt file2.txt
--- file1.txt 2011-11-26 11:07:03.131010360 -0500
+++ file2.txt 2011-11-26 11:07:13.171010362 -0500
@@ -1,2 +1,2 @@
-This is line A.
+This is SPARTA.
This is line B, or otherwise #2.
Описавши зміни, ви можете застосувати її до початкового вмісту та отримати модифікований вміст. І ті зміни, викладені в уніфікованому форматі, які можуть зрозуміти "схожі" програми, називаються файлом патчу. Це як замість того, щоб дістати рибу від того, кого вони навчать, як ловити рибу, щоб ви могли викопати цю рибу з води самостійно. Тепер застосуємо наш патч до file1.txt, щоб він виглядав точно як file2.txt:
$ cat file1.txt
This is line A.
This is line B, or otherwise #2.
$ cat file2.txt
This is SPARTA.
This is line B, or otherwise #2.
$ diff -u file1.txt file2.txt > changes.patch
$ cat changes.patch
--- file1.txt 2011-11-26 11:09:38.651010370 -0500
+++ file2.txt 2011-11-26 11:07:13.171010362 -0500
@@ -1,2 +1,2 @@
-This is line A.
+This is SPARTA.
This is line B, or otherwise #2.
$ patch < changes.patch
patching file file1.txt
$ cat file1.txt
This is SPARTA.
This is line B, or otherwise #2.
$
Ви можете подумати, що простіше просто мати дві версії цього файлу. Що ж, у цьому простому випадку це правда. Але коли у вас багато файлів, а файли дуже великі, набагато ефективніше зробити кілька рядків змін, а не дві копії всієї справи.
Якщо говорити з приводу git, файл патча все ще означає те саме, але використання патчу diff + себе було б кошмаром. Наприклад, вам завжди доведеться перевірити дві версії файлу (або навіть цілого сховища), щоб порівняти їх. Це не звучить так добре, чи не так? Таким чином, git піклується про всю важку роботу для вас - він порівнює ваш локальний файл з тим, що є у сховищі, з яким ви працюєте, і може показати це вам як "diff" або застосувати цей "diff" як патч aka здійснити ваші зміни або навіть дозволити вам застосувати якийсь файл патча, який у вас уже є. Не заглиблюючись у деталі, в цьому сенсі git абсолютно такий же, як і інші системи управління версіями, такі як SVN, або навіть CVS або perforce.
Сподіваюся, це допомагає!
patch
програму. Я думав, що git має власну реалізацію.
Патч - це невеликий файл, який вказує на зміни, внесені у сховище. Зазвичай він використовується, коли хтось із вашої команди має доступ лише для читання, але у нього є добра зміна коду. Потім він створює патч і надсилає його вам. Ви застосовуєте його і натискаєте на сховище git. Тоді всі користуються оновленою версією, а автору патча не потрібен доступ для читання / запису.
Це дійсно в основному справа безпеки (принаймні, для цього користуються люди).
git diff
показує зміни як патчі за замовчуванням, git apply
дозволяє застосовувати патч тощо).
Файл патча являє собою єдиний набір змін, які можна застосувати до будь-якої гілки в будь-якому порядку. Використовуючи патч, ви отримаєте відмінності між одним або кількома файлами. А пізніше ви можете застосувати відмінності (патч), щоб отримати зміни в нових файлах. У Git існує багато застосувань для виправлення. Якщо у вашому робочому каталозі залишилися зміни, і вам потрібно отримати ці зміни, щоб застосувати їх десь ще, просто створіть патч та застосуйте патч.
git diff > mypatch.patch
Якщо у вашому сховищі є нові файли (без трекінгу), слід встановити файл перед створенням виправлення (не виконувати запис) та скористатися наступною командою
git diff --cached > mypatch.patch
Пізніше ви можете застосувати виправлення:
git apply mypatch.patch
Якщо ви хочете внести деякі зміни в сховище git, у вас немає дозволу на запис, просто внесіть зміни та створіть патч між обома, і надішліть патч тому, хто має дозвіл застосувати патч, цим ваші зміни слід додати до цього сховища git.
git format-patch <base_commit_or_branch_name>
= завершіть усі комісії відтепер назад до <base_commit_or_branch_name> у гарні та акуратні файли, що містять розрізнення, а також повідомлення фіксації, для легкого надсилання (наприклад: електронною поштою) комусь, хто хоче їх виправити їх кодова база. Тоді одержувач виправляє свою систему своїм файлом:cat *.patch | git am
Патч - це набір відмінностей між одним або декількома файлами, щоб показати, що між ними відрізняється. Зазвичай ви генеруєте лише патч, щоб показати комусь, що ви змінили. Приклад, коли ви можете це зробити, - це коли ви знайдете та виправите помилку у програмі з відкритим кодом, а потім опублікуйте виправлення в їх трекері помилок.