Перерахуйте всі файли, які коли-небудь існували у сховищі Git


108

Чи є у вас чіткий спосіб перерахувати всі файли, які коли-небудь існували у вказаній галузі?

Відповіді:


135

Це спрощена версія рішення Штрагера :

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

Редагувати: Завдяки Якубу за те, що він навчав мене трохи більше в коментарях, ця версія має коротший конвеєр і дає більше можливостей для того, щоб все виправити.

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" - тільки ім'я | вирізати -f2- | сортувати -у | grep Назва
файлу.ext

3
Примітка: --allце те, що вам знадобиться, якщо у вас є більше, ніж один осирочений наконечник. Наприклад, кілька окремих історій в одному репо.
ThorSummoner

2
--diff-filter=Aігнорує файли, створені при копіюванні вже наявного файлу, тому додавання його не завжди може бути таким, яким ви хочете.
cmbuckley

13

Це робить правильну перевірку того, чи було ім'я файлу коли-небудь присутнє в репо-файлі не лише в поточній гілці.

git log --all --pretty=format: --name-only --diff-filter=A | sort - | grep fubar

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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.