Перерахуйте всі файли, які коли-небудь існували у сховищі 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.