Когда я выполняю a git diff
или a git log -p
, как мне получить номера строк исходного файла (ов), встроенные в вывод?
Я попытался найти это, man git-diff | grep "line numbers"
и я попытался погуглить, но ничего быстро не нашел.
источник
Когда я выполняю a git diff
или a git log -p
, как мне получить номера строк исходного файла (ов), встроенные в вывод?
Я попытался найти это, man git-diff | grep "line numbers"
и я попытался погуглить, но ничего быстро не нашел.
git diff
В настоящее время нет никаких опций, чтобы номера строк отображались вертикально сбоку git diff
.
Эта информация доступна в заголовках блоков (c) для каждого изменения в diff, хотя она просто в формате unified-diff :
@@ -start,count +start,count @@
Исходное состояние файла представлено с помощью -
, а новое состояние представлено с помощью +
(они не означают добавления и удаления в заголовке start
блока . Представляет собой начальный номер строки каждой версии файла и count
представляет, сколько строк включено , начиная с начальной точки.
diff --git a/osx/.gitconfig b/osx/.gitconfig
index 4fd8f04..fcd220c 100644
--- a/osx/.gitconfig
+++ b/osx/.gitconfig
@@ -11,7 +11,7 @@ <== HERE!
[color "branch"]
upstream = cyan
[color "diff"]
- meta = yellow
+ meta = cyan
plain = white dim
old = red bold
new = green bold
Заголовок фрагмента
@@ -11,7 +11,7 @@
говорит, что предыдущая версия файла начинается со строки 11 и включает 7 строк:
11 [color "branch"]
12 upstream = cyan
13 [color "diff"]
14 - meta = yellow
14 + meta = cyan
15 plain = white dim
16 old = red bold
17 new = green bold
а следующая версия файла также начинается со строки 11 и также включает 7 строк.
Как вы, наверное, догадались, формат unified-diff не позволяет легко вычислить номера строк (по крайней мере, если вы не компьютер). Если вам действительно нужны номера строк, которые вы можете прочитать, вам понадобится инструмент сравнения, который отобразит их для вас.
git diff --unified=0 | grep -Po '^\+\+\+ ./\K.*|^@@ -[0-9]+(,[0-9]+)? \+\K[0-9]+(,[0-9]+)?(?= @@)'
--unified=0
или-U0
.git diffn
замену (оболочку), дляgit diff
которой показаны номера строк и полная совместимость со всеми вариантами использования и опциямиgit diff
: stackoverflow.com/questions/24455377/…Вот еще два решения, расширяющие код Энди Тальковски.
Простой текст:
Цветной текст при условии, что
\033[66m
это формат цветовых кодов:Код изменяет строки , которые начинаются с
-
и+
к-1:-
и+1:+
, соответственно, и линии , которые начинаются с чемк
(5,6):
. Цифры - это номера строк из соответствующего файла.источник
git diff
тщательно поддерживает выравнивание. Этот код сейчас не у меня в голове, не могли бы вы его исправить? Другими словами, когда в одной строке говорится,+240:+
а в следующей -(241,257):
, вам нужно добавить несколько дополнительных пробелов в верхнюю строку, чтобы ее код поддерживал правильное выравнивание и отступ с кодом из нижней строки. Может быть, это легко сделать с помощью печати?printf
.git diffn
. Смотрите здесь: stackoverflow.com/a/61997003/4561887 . Спасибо @PFudd за ваш ответ. Я изучил его и использовал для изучения, затем начал с нуля и написалgit diffn
. После форматирования, чтобы я мог прочитать ваш код (спасибо @EdMorton), я смог извлечь из него несколько замечательных вещей, которые мне помогли.Вот сценарий, который пытается исправить это - не тестировал его в гневе, но вроде нормально. Он полагается на записи, которые производит git diff, и использует awk для подсчета строк.
источник
Вы можете использовать
git difftool
для сравнения с внешним редактором, который будет отображать номера строк. Вот как это сделать с помощью vim / vimdiff:Установите vimdiff как инструмент git difftool:
Настройте
~/.vimrc
автоматическое отображение номеров строк при использовании vimdiff:Запустите git difftool, который будет использовать vimdiff с номерами строк:
источник
Быстрый способ - использовать
git diff -U0
. Это установит строки контекста в 0, что приведет к совпадению значений @@ с фактическими измененными строками. По умолчанию значения @@ включают 3 строки контекста до / после, что неудобно для людей.Пример:
Трудно вычислить номера строк измененных строк, потому что строка 10 относится к первой строке предыдущего контекста. Фактический номер первой измененной строки - 10 + 3 = 13. Чтобы рассчитать количество измененных строк, вам также нужно вычесть контекст до и после: 8-3-3 = 2.
Как видите, установка context = 0 упрощает чтение значений @@ для людей. Вы можете видеть, что измененные строки начинаются со строки 13, и есть 2 измененные строки.
Это не идеально, поскольку показывает только номер строки для каждого блока. Если вы хотите видеть номера строк для каждой строки, используйте difftool для внешнего редактора. См. Https://stackoverflow.com/a/50049752
источник
Я хотел бы использовать
git difftool
с Meld как мой difftool. На него легче смотретьgit diff
, он имеет красивое параллельное сравнение графического интерфейса и показывает номера строк с каждой стороны.Настроить:
Пример снимка экрана:
Обновление 24 мая 2020 г .:
Я только что написал
git diffn
за последние несколько дней, чтобы заменить егоgit diff
в командной строке. Дать ему шанс. Смотрите мой другой ответ здесь .источник
С 24 мая 2020 года вы теперь можете использовать сторонний инструмент
git diffn
(полное раскрытие: я написал его) для этой цели. Это легкая оболочкаgit diff
, написанная наawk
языке программирования, основанном на шаблонах / действиях. Вот пример вывода из работыgit diffn
:1/3: Что это такое?
Из верхней части
git-diffn.sh
:ОПИСАНИЕ:
git-diffn.sh
замена, для
git diff
которой также отображаются номера строк! Используйте его точно так жеgit diff
, за исключением того, что вы также увидите эти красивые номера строк, которые помогут вам понять свои изменения.поскольку это всего лишь легкая оболочка на основе языка awk
git diff
, она принимает ВСЕ принимаемые параметры и параметрыgit diff
. Примеры:git diffn HEAD~
git diffn HEAD~3..HEAD~2
работает с любыми
git diff
настройками цвета, даже если вы используете собственные цветаСм. Мой ответ здесь, чтобы узнать, как установить пользовательские цвета различий, а также увидеть снимок экрана с выводом нестандартных цветов из
git diffn
: Как настроить цвет заголовка diff в git diff?Вот несколько примеров
git config
команд из моего ответа выше для установки пользовательскихgit diff
цветов и атрибутов (форматирование текста):in
git diffn
по умолчанию цветной вывод включен; если вы хотите отключить выходной цвет, вы должны использовать--no-color
или--color=never
. Подробнееman git diff
см. Примеры:2/3: Установка
gawk
. Если это так, попробуйте это :brew install gawk
.Вариант 1 (моя рекомендация): загрузите все репо, а затем создайте символическую ссылку на программу, чтобы вы могли легко получать обновления, выполняя
git pull
из репозитория в любое время.Во-первых,
cd
туда, куда вы хотите это установить. Затем запустите:Выполнено! Теперь просто сделайте последний шаг ниже!
Вариант 2 (для тех, кому нужен только 1 файл): загрузите только один файл один раз.
Выполнено! Теперь просто сделайте последний шаг ниже!
Последний шаг:
Теперь закройте и снова откройте свой терминал или повторно используйте его
. ~/.bashrc
, и все готово!git diffn
теперь будет работать как точная замена дляgit diff
!Вот демо:
3/3: Демо
git diffn
:Создайте этот файл:
hello_world.c:
Зафиксируйте это:
Измените его на это и сохраните файл:
hello_world.c:
Теперь запустите:
Вот результат
git diff
first для сравнения:И скриншот, чтобы показать цвет. Обратите внимание, что выделенный красным раздел просто показывает пустые пробелы (в данном случае пробелы), которые можно удалить:
Теперь вот результат
git diffn
. Обратите внимание, что он отлично показывает все номера строк!-
знак как в крайнем левом, так и в правом углу,:
чтобы помочь вам лучше видеть - независимо от того, любят ли ваши глаза сканировать вниз вправо от двоеточия или вниз в дальнем слева от экрана.+
знак как крайний левый, так и справа от:
.,
.Выход
git diffn
:И скриншот, чтобы показать цвет. Обратите внимание, что двоеточия НЕ окрашены или стилизованы в соответствии с окружающим текстом слева и справа. Это намеренное и разработанное поведение, которое действует как визуальный разделитель между номерами строк, добавленными слева, и исходным
git diff
выводом справа.источник
Можешь попробовать
в файле. Он показывает вам коммиттера, идентификатор фиксации и номер строки для каждой строки в файле.
источник
git blame
просто покажет текущее состояние файла с номерами строк.git blame
никоим образом не отвечает на вопрос; Я довольно озадачен голосованием здесьСначала настройте инструмент git diff, например Meld
Затем скопируйте свой difftool в какой-нибудь файл:
Не забудьте установить номер строки в настройках вашего инструмента сравнения.
источник