Может кто-нибудь объяснить использование git range-diff? - PullRequest
0 голосов
/ 14 сентября 2018

Git версии 2.19 вводит git range-diff, который должен использоваться для сравнения двух диапазонов фиксации. Я читал документацию, но не могу понять, какова цель этих новых функций.

Я проверил официальную документацию Git , и у меня возникли проблемы с пониманием его синтаксиса (без флагов):

git range-diff ( <range1> <range2> | <rev1>...​<rev2> | <base> <rev1> <rev2> )

Что такое rev1 и rev2?

Может ли кто-нибудь объяснить, когда они полезны, я имею в виду каждый случай?

Ответы [ 3 ]

0 голосов
/ 14 сентября 2018

Я на самом деле еще не использовал их, но они предназначены для улучшения по сравнению со старым потоком git cherry* для анализа / сравнения некоторого набора изменений в восходящем или нисходящем направлении с тем, что у вас есть сейчас.Чтобы сделать наборы диапазонов полезными, мы хотим, чтобы некоторый набор «вот мои коммиты» и «вот их» был выражен настолько просто, насколько это возможно.

A range1 range2 set woiuld записываетсякак, например:

git range-diff theirs~5..theirs ours~4..ours

, если у вас было, например:

          T1--T2--T3--T4--T5   <-- theirs
         /
...--o--*   <-- base
         \
          O1--O2--O3--O4   <-- ours

, где O коммиты "наши", а T коммиты "их".

Учитывая эту точно такую ​​же конфигурацию, мы могли бы также написать:

git range-diff theirs...ours    # or ours...theirs

(обратите внимание на три точки).(Это синтаксис, используемый с git rev-list --cherry-mark --left-right, например.)

Или, опять же, учитывая ту же ситуацию, мы могли бы написать:

git range-diff base theirs ours   # or base ours theirs

Здесь base - точка остановкикак для их, так и для нас, и избегает необходимости обратного отсчета 5.

Если ситуация более сложная - как на графике:

          X1--T1--T2--T3   <-- theirs
         /
...--o--*   <-- base
         \
          Y1--Y2--O1--O2--O3--O4   <-- ours

ни трехточка, ни base ours theirs вид синтаксиса вполне работает, поэтому лучше всего подойдет два набора диапазонов (theirs~3..theirs ours~4..ours).

0 голосов
/ 27 июля 2019

Команда git range-diff, которую вы видите здесь , сравнивающая два исправления , была пересмотрена в Git 2.23 (Q3 2019), для более простой идентификации какой части какого файла показанный патч о.

См. коммит 499352c , коммит 444e096 , коммит b66885a , коммит 430be36 , коммит e1db263 , коммит 44b67cb , коммит 1ca6922 , коммит ef283b3 , коммит 80e1841 (11 июля 2019 г.) и коммит 877a833 , коммит 570fe99 , коммит 85c3713 , коммит d6c88c4 , коммит 5af4087 (08 июля 2019) Томас Гуммерер (tgummerer ) .
(Объединено с Junio ​​C Hamano - gitster - в коммит 43ba21c , 25 июля 2019 г.)

range-diff: добавить имя файла к внутреннему diff

В диапазоне дальности не всегда ясно, какой файл определенного funcname внутренний diff принадлежит, потому что заголовок diff (или заголовок раздела, добавленный в предыдущем коммите) не всегда виден в range-diff.

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

Это также позволяет нам добавить имя файла + имя функции к внешнему Различает заголовки блоков, используя пользовательский шаблон userdiff, что будет сделано в следующем коммите.

range-diff: добавить заголовки к внешнему заголовку блока

Добавьте заголовки разделов / заголовки разделов, которые мы ввели в предыдущих коммитах, в заголовки разделов внешнего diff.
Это облегчает понимание того, какие изменения мы на самом деле рассматриваем. Например, внешний заголовок блока теперь может выглядеть так:

@@  Documentation/config/interactive.txt

тогда как раньше это было бы

@@

, который не дает большого контекста для изменения, которое следует.

См. t3206-range-diff.sh в качестве примера.

И

range-diff: добавить заголовок раздела вместо заголовка diff

В настоящее время range-diff сохраняет заголовок diff для внутреннего diff без изменений (за исключением строк, начинающихся с индекса).
Этот заголовок diff несколько полезен, особенно когда файлы различаются имена в разных диапазонах.

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

Ввести новый заголовок разностного диапазона diff, заключенный в «##», аналогично тому, как номера строк в разностных блоки заключены в «@@», и дать удобочитаемую информацию о том, что именно произошло с файлом, включая имя файла.

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

Опять же, t3206-range-diff.sh приводит пример:

git range-diff --no-color --submodule=log topic...renamed-file >actual &&
sed s/Z/\ /g >expected <<-EOF &&
1:  4de457d = 1:  f258d75 s/5/A/
2:  fccce22 ! 2:  017b62d s/4/A/
    @@ Metadata
    ZAuthor: Thomas Rast <trast@inf.ethz.ch>
    Z
    Z ## Commit message ##
    -    s/4/A/
    +    s/4/A/ + rename file
    Z
    - ## file ##
    + ## file => renamed-file ##
    Z@@
    Z 1
    Z 2
0 голосов
/ 14 сентября 2018

«Диапазон» на языке Git - это пара идентификаторов ревизии (начало и конец).

Первая форма использования для git range-diff - <range1> <range2>.Поскольку мы знаем, что диапазон - это пара идентификаторов ревизий, некоторые возможные примеры:

abc1234..def5678 9876foo..5432bar
HEAD..def5678 my_release_1_1..my_release_1_2

Другие две формы использования предназначены для удобства, когда некоторые из четырех идентификаторов ревизий совпадают друг с другом.А именно:

  1. Для случая, подобного abc..def def..abc, вы можете просто указать def...abc.
  2. Для случая, подобного abc..def abc..xyz, вы можете указать abc def xyz.Для меня это обычное дело: вы хотите сравнить два диапазона, начинающиеся в одной точке.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...