Buat daftar semua file yang pernah ada di repositori Git

109

Apakah Anda memiliki cara yang bersih untuk membuat daftar semua file yang pernah ada di cabang tertentu?

elmarco
sumber

Jawaban:

136

Ini adalah variasi solusi Strager yang disederhanakan :

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

Sunting: Terima kasih kepada Jakub karena telah mengajari saya lebih banyak di komentar, versi ini memiliki alur yang lebih pendek dan memberi git lebih banyak kesempatan untuk memperbaiki semuanya.

git log --pretty=format: --name-only --diff-filter=A | sort -u
Dustin
sumber
8
@Dustlin: Tambahkan opsi --diff-filter = A (daftar hanya file yang ditambahkan). Versi saat ini (tanpa pemfilteran sed hanya menambahkan file) akan gagal jika Anda mengaktifkan deteksi ganti nama dan mengganti nama dalam riwayat. Saya pikir Anda kemudian dapat menggunakan --name-only daripada --name-status dan menghapus 'cut -f2-' dari pipeline.
Jakub Narębski
Di salah satu repo saya, saya mendapatkan beberapa baris duplikat (termasuk sejumlah baris kosong di awal keluaran) dengan perintah kedua yang tidak menipu dengan yang pertama.
Slipp D. Thompson
Jika Anda memerlukan lebih banyak info daripada nama file: $ git log --pretty = format: "% h% an [% cd]:% s" --name-only | potong -f2- | urutkan -u | grep Filename.ext
Nitay
3
Catatan: --alladalah sesuatu yang Anda perlukan jika Anda memiliki lebih dari satu tip yatim piatu. Misalnya, beberapa riwayat terpisah dalam satu repo.
ThorSummoner
2
--diff-filter=Amengabaikan file yang dibuat dengan menyalin file yang sudah ada, jadi menambahkannya mungkin tidak selalu seperti yang Anda inginkan.
cmbuckley
13

Ini melakukan hal yang benar untuk memeriksa apakah nama file pernah ada di repo tidak hanya di cabang saat ini.

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

Anda dapat menjalankan git-log --name-status, yang menggemakan sesuatu seperti:

commit afdbbaf52ab24ef7ce1daaf75f3aaf18c4d2fee0
Author: Your Name <[email protected]>
Date:   Tue Aug 12 13:28:34 2008 -0700

    Added test file.

A       test

Kemudian ekstrak file ditambahkan:

git-log --name-status | sed -ne 's/^A[^u]//p' | sort -u
strager
sumber
2

Berikut ini dua alias yang berguna: FindFile ffdan 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 #"

Anda mendapatkan informasi tentang nama file dan pengoperasiannya.

Penggunaan sampel:

$ 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
Juan Antonio Tubío
sumber