Перечислите все файлы, которые когда-либо существовали в репозитории Git

109

У вас есть чистый способ перечислить все файлы, которые когда-либо существовали в указанной ветке?

Эльмарко
источник

Ответы:

136

Это упрощенная вариация Strager в растворе :

git log --pretty=format: --name-status | cut -f2- | sort -u

Изменить: благодаря Якубу за то, что он немного научил меня в комментариях, эта версия имеет более короткий конвейер и дает git больше возможностей для правильного решения.

git log --pretty=format: --name-only --diff-filter=A | sort -u
Дастин
источник
8
@Dustlin: Добавить --diff-filter = параметр (список только добавленных файлов). Текущая версия (без фильтрации sed только добавленные файлы) не будет работать, если вы включили обнаружение переименования и переименовали в истории. Я думаю, вы можете использовать --name-only вместо --name-status и удалить 'cut -f2-' из конвейера.
Якуб Наребски,
В одном из моих репозиториев я получаю довольно много повторяющихся строк (включая несколько пустых строк в начале вывода) со второй командой, которые не дублируются с первой.
Слипп Д. Томпсон
Если вам нужно немного больше информации, чем имя файла: $ git log --pretty = format: "% h% an [% cd]:% s" --name-only | вырезать -f2- | sort -u | grep Filename.ext
Нитай
3
Примечание: --allэто то, что вам понадобится, если у вас есть несколько осиротевших чаевых. Например, несколько отдельных историй в одном репо.
ThorSummoner
2
--diff-filter=Aигнорирует файлы, которые были созданы путем копирования уже существующего файла, поэтому добавление его не всегда может быть тем, что вы хотите.
cmbuckley
13

Это правильно для проверки, присутствовало ли когда-либо имя файла в репо, а не только в текущей ветке.

git log --all --pretty=format: --name-only --diff-filter=A | sort - | grep fubar
dch
источник
3

Вы можете запустить git-log --name-status, что будет примерно таким:

commit afdbbaf52ab24ef7ce1daaf75f3aaf18c4d2fee0
Author: Your Name <your@email.com>
Date:   Tue Aug 12 13:28:34 2008 -0700

    Added test file.

A       test

Затем извлеките добавленные файлы:

git-log --name-status | sed -ne 's/^A[^u]//p' | sort -u
странник
источник
2

Вот два полезных псевдонима: FindFile ffи FindFilewithCopies ffc:

# Find if one file ever had into repository
ff = "!git log --pretty=format: --name-status --all -M -B | sort -u | grep $1   #"
# The same as above but showing copied files
ffc = "!git log --pretty=format: --name-status --all -C -M -B | sort -u | grep $1 #"

Вы получаете информацию об именах файлов и операциях с ними.

Пример использования:

$ git ff create
A       database/migrations/2014_10_12_000000_create_users_table.php
A       database/migrations/2014_10_12_100000_create_password_resets_table.php
A       database/migrations/2015_05_11_200932_create_boletin_table.php
A       database/migrations/2015_05_15_133500_create_usuarios_table.php
D       database/migrations/2015_05_12_000000_create_users_table.php
M       database/migrations/2015_05_11_200932_create_boletin_table.php
R051    database/migrations/2014_10_12_000000_create_users_table.php    database/migrations/2015_05_12_000000_create_users_table.php

$ git ffc create
A       database/migrations/2014_10_12_000000_create_users_table.php
A       database/migrations/2014_10_12_100000_create_password_resets_table.php
A       database/migrations/2015_05_11_200932_create_boletin_table.php
A       database/migrations/2015_05_15_133500_create_usuarios_table.php
C052    database/migrations/2014_10_12_000000_create_users_table.php    database/migrations/2015_05_11_210246_create_boletin_nosend_table.php
D       database/migrations/2015_05_12_000000_create_users_table.php
M       database/migrations/2015_05_11_200932_create_boletin_table.php
R051    database/migrations/2014_10_12_000000_create_users_table.php    database/migrations/2015_05_12_000000_create_users_table.php
Хуан Антонио Тубио
источник