แสดงรายการไฟล์ทั้งหมดที่เคยมีอยู่ในที่เก็บ Git


109

คุณมีวิธีที่ชัดเจนในการแสดงรายการไฟล์ทั้งหมดที่เคยมีอยู่ในสาขาที่ระบุหรือไม่?

คำตอบ:


136

นี่คือรูปแบบที่เรียบง่ายของ Strager ของการแก้ปัญหา :

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

แก้ไข:ขอบคุณ Jakub ที่สอนฉันมากขึ้นในความคิดเห็นเวอร์ชันนี้มีไปป์ไลน์ที่สั้นลงและเปิดโอกาสให้คอมไพล์ได้รับสิ่งที่ถูกต้องมากขึ้น

git log --pretty=format: --name-only --diff-filter=A | sort -u

8
@Dustlin: เพิ่ม --diff-filter = ตัวเลือก (แสดงรายการไฟล์ที่เพิ่มเท่านั้น) เวอร์ชันปัจจุบัน (โดยไม่มีการกรองเฉพาะไฟล์ที่เพิ่ม) จะล้มเหลวหากคุณเปิดใช้งานการตรวจหาการเปลี่ยนชื่อและมีการเปลี่ยนชื่อในประวัติ ฉันคิดว่าคุณสามารถใช้ --name-only แทน --name-status และลบ 'cut -f2-' จากไปป์ไลน์ได้
Jakub Narębski

ใน repos หนึ่งของฉันฉันได้รับบรรทัดที่ซ้ำกันไม่กี่บรรทัด (รวมถึงบรรทัดว่างจำนวนหนึ่งที่จุดเริ่มต้นของเอาต์พุต) พร้อมกับคำสั่งที่สองที่ไม่ซ้ำกับบรรทัดแรก
Slipp D.Thompson

หากคุณต้องการข้อมูลมากกว่าชื่อไฟล์: $ git log --pretty = format: "% h% an [% cd]:% s" --name-only | ตัด -f2- | เรียง -u | grep Filename.ext
Nitay

3
หมายเหตุ: --allเป็นสิ่งที่คุณต้องการหากคุณมีเคล็ดลับที่เป็นกำพร้ามากกว่าหนึ่งเคล็ดลับ เช่นประวัติที่แยกจากกันหลายรายการใน repo เดียว
ThorSummoner

2
--diff-filter=Aละเว้นไฟล์ที่ถูกสร้างขึ้นโดยการคัดลอกไฟล์ที่มีอยู่แล้วดังนั้นการเพิ่มมันอาจจะไม่เสมอเป็นสิ่งที่คุณต้องการ
cmbuckley

13

สิ่งนี้เป็นสิ่งที่ถูกต้องสำหรับการตรวจสอบว่ามีชื่อไฟล์อยู่ในrepoไม่ใช่เฉพาะในสาขาปัจจุบันหรือไม่

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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.