Я огляделся и не уверен, что это возможно, но здесь идет:
У меня есть (javascript) файл (скажем/lib/client.js), в котором у меня есть уникальный идентификатор, назначенный переменной, например: var identifier = "SOME_IDENTIFIER";
Вы можете вспомнить идентификатор, такой как номер версии: Периодически мы будем менять эту переменную на новый идентификатор.
Мне бы хотелось найти все уникальные идентификаторы, которые мы когда-либо использовали. Как это сделать с помощью git?
Я предполагаю, что может быть способ поиска в истории git и распечатать строку, соответствующую "var identifier ="
. Я могу удалить этот список вручную.
В любом случае, я был бы признателен за понимание. Спасибо.
Ответ 1
Так как git 1.8.4, существует более прямой способ ответить на ваш вопрос.
Предполагая, что строка 110
является строкой, говорящей var identifier = "SOME_IDENTIFIER";
, сделайте следующее:
git log -L110,110:/lib/client.js
Это приведет к возврату каждой фиксации, которая коснулась этой строки кода.
[Git Документация (см. параграф` -L "командной строки)]
Ответ 2
См. справочную страницу для git-log
и gitdiffcore
. Я считаю, что эта команда будет делать это, но это может быть не совсем правильно:
git log -G "var identifier =" file.js
РЕДАКТИРОВАТЬ: Здесь грубое начало для bash script, чтобы показать фактические строки. Это может быть больше того, что вы ищете.
for c in $(git log -G "something" --format=%H -- file.js); do
git --no-pager grep -e "something" $c -- file.js
done
Он использует git log -G
для поиска интересных коммитов, используя --format=%H
для создания списка хэшей commit. Затем он повторяет каждую интересную фиксацию, запрашивая git grep
, чтобы показать строки из этого файла фиксации и файла, которые содержат регулярное выражение, предваряемые хешем фиксации.
EDIT: Изменен для использования -G
вместо -S
, как предлагается в комментариях.
Ответ 3
Вы также можете сделать это с помощью gitk:
gitk file.js
В раскрывающемся списке "commit" выберите "добавление/удаление строки:", а в текстовом поле рядом с ним введите "var identifier =", и любые фиксации, которые добавляют или удаляют строки, содержащие эту строку, будут выделены.
Ответ 4
Если вы адаптируете @rob ответ немного, git log
будет в основном делать это за вас, если вам нужно только визуальное сравнение:
git log -U0 -S "var identifier =" path/to/file
-U0
означает вывод в режиме исправления (-p
) и показывает нулевые строки контекста вокруг патча.
Вы можете даже сделать это через ветки:
git log -U0 -S "var identifier =" branchname1 branchname2 -- path/to/file
Может быть способ подавить заголовок diff, но я не знаю об этом.
Ответ 5
В magit вы можете сделать это с помощью
l, =L
Затем он попросит вас создать файл и начать, завершать строки.