Git не показывает изменения, даже если файл изменился - PullRequest
0 голосов
/ 29 июня 2018

Git сломан или что мы делаем не так? ; -)

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

Как это может быть:

$ git checkout 27773b72432e86d308d25d666663f237e50aa3fd Tools/foo.php
$ md5sum Tools/foo.php
85552061cae9832c11eb6607ac88e3d8 Tools/foo.php
$ git checkout master Tools/foo.php
$ md5sum Tools/foo.php
f38f51232785a432af2d1bd8db4429ed  Tools/foo.php

НО:

$ git whatchanged 27773b72432e86d308d25d666663f237e50aa3fd..master  | grep foo.php
# empty result

Как это может быть?

Ответы [ 2 ]

0 голосов
/ 30 июня 2018

Краткий ответ: вы можете попробовать использовать

git whatchanged master..27773b72432e86d308d25d666663f237e50aa3fd

(Это правда, что вам действительно следует использовать git log вместо этого, но это не связано с тем, почему он не делает то, что вы ожидаете.)

Вот некоторая информация, которая поможет понять, почему:

Это обозначение 27773b72432e86d308d25d666663f237e50aa3fd..master не не , как предлагали другие пользователи, означает «диапазон коммитов, начинающийся (но исключая) 27773b7 и заканчивающийся (и включающий) master». Иногда это сводится к этому, но это не то, что означает . (И через минуту вы увидите, почему это различие важно.)

Что это значит: «все коммиты, которые достижимы с master, но не достижимы с 27773b7». (Где «достижимый» означает через родительские указатели.)

Теперь, если мы предположим, что ваш график коммитов выглядит как

 .... 27773b7 -- A -- B -- C <--(master)

тогда это уменьшит до типа "диапазона", который определили другие. Но в этом случае вы не столкнетесь с проблемой. Это потому, что вы показали, что файл в 27773b7 отличается от файла в C (master), что означает, что либо A, либо B, либо C должно быть изменено. Если ваш график коммитов выглядит так.

Таким образом, мы можем сделать вывод, что ваш граф фиксации не выглядит так.

Еще один способ, которым это может выглядеть:

--- o -- A -- 27773b7 -- x ...
     \
      B -- C <--(master)

На этом графике 27773b7...master означает просто B и C, потому что A недостижимо для master, и в то время как o является достижимым master, это также достижимо 27773b7.

Возможно, причина в том, что файл отличается от 27773b7, заключается в том, что он был изменен либо A, либо самим 27773b7. В любом случае, использование 27773b7^ (как предполагает другой ответ) не поможет.

Что возвращает меня к моей точке зрения: если вы действительно хотите думать о том, что обозначение A..B определяет диапазон, начало диапазона можно не считать A; во всяком случае, вы ожидаете, что это будет база слияния между A и B (если она есть; иногда это может быть просто корень B s иерархии коммитов) - и это равно A только если A достижимо с B. И, во всяком случае, вы не можете предполагать, что это линейный диапазон коммитов.

Но понимание подмножества графа коммитов, которое он действительно показывает, делает более ясным, что если A..B ничего не показывает, вам, возможно, придется попробовать B..A.

0 голосов
/ 29 июня 2018

Диапазон, указанный как A..B, означает от A до B, но , исключая A. См. https://git -scm.com / docs / gitrevisions # gitrevisions-Theememtwo-dotRangeNotation

Если ревизия 27773b7 является единственной ревизией, в которой файл Tools/foo.php был изменен, то диапазон 27773b7..master исключает именно это изменение.

Обновление:

То, что вы хотите, это включить А, но исключить всех его родителей. Ярлык для этого A^!. См. https://git -scm.com / docs / gitrevisions # _other_rev_parent_shorthand_notations .

Итак, ваша команда будет

$ git whatchanged 27773b7^! master | grep foo.php

Последнее замечание: https://git -scm.com / docs / git-whatchanged предлагает использовать git log вместо git whatchanged.

Чтобы получить список только имен файлов, вы должны сказать:

$ git log --name-only --format="" (other arguments here)

Это гарантирует, что при выводе grep вы не совпадете случайно с комментарием.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...