Что такое патч в Git version control?



Я новичок как в git, так и в управлении версиями, поэтому я пытаюсь выяснить, что такое патч и чем он отличается от остальных действий, которые я делаю в git?



когда я могу применить патч? Это происходит каждый раз, когда я совершаю?

1188   5  

5 ответов:

вы можете видеть в этом блоге Как вы можете создать патч (набор изменений, которые вы хотите сообщить и применить к другому РЕПО)

git patch
(фото из блога 2008 года"Bioruby с git: как это будет работать?", опубликованной Jan AERTS)

см. также вклад в рельсы с Git как еще один конкретный пример.

в наше время, запрос тяги GitHub делает это действительно легко применить патчи на репозиториях GitHub, что полезно, когда вы не являетесь прямым участником (т. е. вы не имеете права напрямую нажимать на репо).
На самом деле, совсем недавно GitHub представил " Лучше Тянуть Запрос Электронной Почты" для улучшения уведомления о новых патчей.

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

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

Итак, что такое патч? Допустим, у вас есть текстовый файл с 2 линиями:

This is line A.
This is line B, or otherwise #2.

затем вы меняете первую строку, и теперь ваш файл выглядит так это:

This is SPARTA.
This is line B, or otherwise #2.

как бы вы описали изменение содержимого файла? Вы можете сказать, что первая строка "это линия А." была заменена на "это Спарта.или даже последнее слово " а "в первой строке заменено другим словом"Спарта". И это именно то, что diff говорит нам. Допустим, у меня есть две версии этого файла, одна называется file1.TXT и еще один файл2.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, patch file по-прежнему означает то же самое, но использование diff + patch самостоятельно было бы кошмаром. Например, вам всегда нужно будет иметь две версии файла (или даже весь репозиторий), чтобы сравнить их. Звучит не очень хорошо, не так ли? Так ГИТ принимает на себя все тяжелую работу за вас - он сравнит ваш локальный файл с тем, что есть в репозитории, с которыми вы работаете, и могу показать его вам как "дифференциалов" или применить "дифф" в виде патча ака зафиксировать ваши изменения, или даже использовать какой-нибудь патч файла, который вы уже. Не вдаваясь в подробности, в этом смысле git абсолютно такой же, как и другие системы управления версиями, такие как SVN, или даже CVS или perforce.

надеюсь, что это помогает!

патч-это небольшой файл, который указывает, что было изменено в репозитории. Он обычно используется, когда кто-то из вашей команды имеет доступ только для чтения, но имеет хорошее изменение кода. Затем он создает патч и отправляет его вам. Вы применяете его и отправляете в репозиторий git. Все тогда выигрывают от обновленной версии, и автору патча не нужен был доступ для чтения/записи.

Это действительно в основном вещь безопасности (по крайней мере, это то, что люди используют его для.)

патч-это набор различий между одним или несколькими файлами, чтобы показать, что отличается между ними. Обычно вы создаете патч только для того, чтобы показать кому-то, что вы изменили. Пример того, когда вы можете сделать это, когда вы находите и исправляете ошибку в приложении с открытым исходным кодом, а затем публикуете исправление на своем трекере ошибок.

файл патч представляет собой один набор изменений, которые могут быть применены к любой отрасли, в любом порядке. Используя патч, вы получите различия между одним или несколькими файлами. И позже, вы можете применить различия (патч), чтобы получить изменения на новые файлы. Есть много применений для патча в Git. Если у вас есть незафиксированные изменения в вашем рабочем каталоге, и вам нужно, чтобы эти изменения применялись где-то еще, просто создайте патч и примените патч.

git diff > mypatch.patch

Если у вас есть новые файлы в вашем репозитории (untracked), затем вы должны поместить файл перед созданием патча (не фиксировать) и использовать следующую команду

git diff --cached > mypatch.patch 

вы можете позже применить патч:

git apply mypatch.patch

Если вы хотите внести некоторые изменения в репозиторий git, что у вас нет разрешения на запись, просто внесите изменения и создайте патч между ними и отправьте патч кому-то, у кого есть разрешение на применение патча, тем самым ваши изменения должны быть добавлены к этому git хранилище.

Comments

    Ничего не найдено.