2015-10-12 1 views
2

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

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

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

ответ

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 выходы см. How to have git log show filenames like svn log -v


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

git diff hash1..hash2 --name-only 
+0

я сделал то, что вы показали выше, в более простых терминах, как "мерзавца лог --pretty = формат: --name-статус". Да Это дает только имена файлов, но добавляет статус модификации A, M, D и т. Д. В начале каждой строки перед именем файла. Вот почему я упомянул ТОЛЬКО имя файла с путём !!Любое обходное решение .. ?? – flute

+1

@flute Получил это! Вам нужно только магия 'sed' в конце (см. Редактирование):' ... | sed -e 's/^ \ w \ t * \ * //' ' –

+0

Вы какой-то волшебник? вы решили использовать git log для этого! оно работает! – flute

0

Это не использует 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 либо одной commitish так что вы по сравнению с текущей 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?

0

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

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

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

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

При необходимости сортировки и удаления dupplicates

git log --name-only --format="" | sort | uniq 
+0

Я выделил фразу «ТОЛЬКО имя файла с помощью пути». – flute

 Смежные вопросы

  • Нет связанных вопросов^_^