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?

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

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

3

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

commit afdbbaf52ab24ef7ce1daaf75f3aaf18c4d2fee0
Author: Your Name <your@email.com>
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

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.