Как получить ТОЛЬКО имя файла с путем, используя журнал git?

git github git-log

2562 просмотра

3 ответа

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

/path/filename.txt
/path/anotherfile.ext
...
...

Мой ввод даты ОТ и ТО для команды git log. Либо в git log указано имя разработчика или дата, либо номер коммита, либо что-то, чего я не хочу с именами файлов. Как получить ТОЛЬКО имя файла с полным путем?

Автор: Murali Uppangala Источник Размещён: 12.11.2019 09:27

Ответы (3)


3 плюса

Решение

Используйте --sinceи --untilварианты для выбора диапазона времени , а затем вы можете использовать UNIX трубу , чтобы grep, sortи собирать uniqэлектронные пути:

git log --name-status --since='..' --until='..' | grep -E '^[A-Z]\b' | sort | uniq | sed -e 's/^\w\t*\ *//'

Пример:

git log --name-status --since='1 January 2015' --until='2 January 2015' | grep -E '^[A-Z]\b' | sort | uniq | sed -e 's/^\w\t*\ *//'

Для более подробных git logвыводов смотрите Как сделать так, чтобы git log отображал имена файлов, такие как svn log -v


Если вам нужно зафиксировать хэши, вы также можете использовать git diffи --name-onlyвместо этого, как упоминает другой ответ:

git diff hash1..hash2 --name-only
Автор: Ionică Bizău Размещён: 12.10.2015 12:17

2 плюса

Используйте --name-onlyи удалите сообщение с пустым форматом

git log --name-only --format=""

Просто используйте все остальные git logопции как обычно. Например

git log --name-only --format="" -n 2 master

При желании сортировать и удалять дубликаты

git log --name-only --format="" | sort | uniq
Автор: René Link Размещён: 12.10.2015 02:07

1 плюс

Это не использует git log, но если вы хотите использовать объекты коммитов (хэши, ссылки на ветки или другие идентификаторы коммитов), git diffэто упрощается. Пример получения измененных файлов за последние три коммита.

$ git diff HEAD~3 --name-only
> some/path/with/file.php
> another/path/and/file.html
> yet/another.json

Вы можете заменить HEAD~3либо одним коммитом, чтобы сравнить его с текущим HEAD (коммит, в котором вы находитесь), либо затем определить диапазон фиксации с помощью <commitish>..<commitish>:

$ git diff HEAD..abcd1234 --name-only
> file/name/here.cpp

$ git diff 1234abcd..abcd1234 --name-only
> some/file/name-here.txt

Если вам нужно отфильтровать файлы по типу модификации (например, добавлен, изменен, удален ...), вы можете использовать эту --diff-filterопцию. man git diff:

--diff-filter=[(A|C|D|M|R|T|U|X|B)...[*]]
       Select only files that are Added (A), Copied (C), Deleted (D), Modified (M), Renamed (R), have their type (i.e. regular file, symlink, submodule, ...) changed (T), are
       Unmerged (U), are Unknown (X), or have had their pairing Broken (B). Any combination of the filter characters (including none) can be used. When * (All-or-none) is added
       to the combination, all paths are selected if there is any file that matches other criteria in the comparison; if there is no file that matches other criteria, nothing
       is selected.

Если вам нужно использовать даты для фильтрации, то это может быть не лучшим вариантом. Возможно использовать, git log --since=...чтобы получить первый хеш для даты и передать его git diff?

Автор: ojrask Размещён: 12.10.2015 12:55
Вопросы из категории :
32x32