ฉันจะทำให้คอมไพล์แสดงรายการไฟล์ที่ถูกติดตามได้อย่างไร?


535

เมื่อใช้คอมไพล์บรรทัดคำสั่งฉันจะทำให้ git แสดงรายการไฟล์ที่ถูกติดตามในที่เก็บได้อย่างไร


5
เป็นไปได้ที่ซ้ำกันของรายการไฟล์ใน repo git ท้องถิ่น?
Kristján

2
ฉันเชื่อว่ามันเป็น แต่มันก็ไม่เหมาะสมที่จะทำเครื่องหมายสิ่งนี้ว่าเป็นสิ่งที่ซ้ำกันเมื่อมันมีคำตอบที่ดีกว่า
lindhe

5
ในเอกภพคู่ขนานมันแปลกที่คำถามนี้มีความคล้ายคลึงกันอย่างไรรวมทั้งคำตอบทั้งหมด
Jeff Puckett

คำตอบ:


628

หากคุณต้องการแสดงรายการไฟล์ทั้งหมดที่กำลังติดตามภายใต้สาขาmasterคุณสามารถใช้คำสั่งนี้:

git ls-tree -r master --name-only

หากคุณต้องการรายการไฟล์ที่เคยมีอยู่ (เช่นรวมถึงไฟล์ที่ถูกลบ):

git log --pretty=format: --name-only --diff-filter=A | sort - | sed '/^$/d'

61
ใช้ git ls-tree -r HEAD - name-only หากคุณต้องการแสดงรายการไฟล์ของสาขาปัจจุบัน
Ramast

3
เหตุใดจึงไม่มีไดเรกทอรีอยู่ในรายการ
Shuzheng

13
@NicolasLykkeIversen - gitไม่ได้ไดเรกทอรีรุ่นโดยตรง แต่จะเก็บไฟล์และเส้นทางของพวกเขาแทน ls-treeจะส่งออกไฟล์ที่เป็นเวอร์ชันทั้งหมด เพื่อทำความเข้าใจความแตกต่างนี้ลองแสดงละคร directory gitว่างไป ไดเรกทอรีว่างเปล่าจะไม่ปรากฏในการเปลี่ยนแปลงฉาก วิธีเดียวที่จะจัดทำไดเร็กตอรี่ที่ว่างเช่นนี้คือการจัดทำไฟล์ภายใต้ไดเรกทอรี สำหรับกรณีการใช้งานที่คุณต้องการไดเรกทอรีตัวยึดตำแหน่งว่างในการควบคุมเวอร์ชันคุณสามารถสร้างไฟล์จำลองภายใต้ไดเรกทอรีและรุ่นที่ ฉันหวังว่าคำอธิบายจะชัดเจน
ทักซิโด

2
เพิ่งทราบls-tree masterจะไม่แสดงไฟล์ที่ถูกติดตามในพื้นที่การแสดงละคร
nn0p

เป็นไปได้ไหมที่จะแสดงเฉพาะไดเรกทอรีระดับบนสุดหากมีไดเรกทอรีย่อยและไฟล์จำนวนมาก?
Blaszard

191

git ls-filesไฟล์ที่มีการจัดการโดยคอมไพล์จะแสดงโดย ตรวจสอบหน้าคู่มือ


4
ดูเหมือนว่าจะแสดงเฉพาะไฟล์ที่หรือต่ำกว่าไดเรกทอรีปัจจุบัน
Lyle Z

11
หากฉันแก้ไขสิ่งนี้เพื่อรวมส่วนที่เกี่ยวข้องของหน้าคู่มือ
Nathan Basanese

1
@NathanBasanese บางทีคุณสามารถเพิ่มคำตอบด้วยข้อมูลนั้นได้
José Castro

@LyleZ บางทีนี่อาจเป็นเพื่อให้สอดคล้องกับls... หรือls -R
flow2k

1
@LyleZ นอกจากนี้พฤติกรรมนี้เป็นเช่นเดียวกันกับgit ls-tree- pwdมันเป็นเมื่อเทียบกับ
flow2k

18

คำตอบที่ยอมรับจะแสดงเฉพาะไฟล์ในแผนผังไดเรกทอรีปัจจุบัน ที่จะแสดงให้ทุกไฟล์ติดตามที่ได้รับการมุ่งมั่น (สาขาปัจจุบัน), การใช้งาน

git ls-tree --full-tree --name-only -r HEAD
  • --full-tree ทำให้คำสั่งทำงานราวกับว่าคุณอยู่ในไดเรกทอรีรากของ repo
  • -rเรียกใช้ซ้ำในไดเรกทอรีย่อย เมื่อรวมกับไฟล์--full-treeนี้จะช่วยให้คุณสามารถติดตามไฟล์ได้ทั้งหมด
  • --name-only ลบ SHA / ข้อมูลการอนุญาตเมื่อคุณต้องการเส้นทางไฟล์
  • HEADระบุสาขาที่คุณต้องการรายการของไฟล์ที่ถูกติดตามและถูกคอมมิท คุณสามารถเปลี่ยนเป็นmasterหรือชื่อสาขาอื่น ๆ ได้ แต่HEADเป็นการกระทำที่คุณตรวจสอบแล้ว

นี่คือวิธีการจากคำตอบที่ได้รับการยอมรับไป ~ คำถามที่ซ้ำกันhttps://stackoverflow.com/a/8533413/4880003


ขอบคุณ! ยังใช้งานได้สำหรับ repos เปลือย
hzpc-joostk

5

คุณอาจต้องการเอาท์พุทสีด้วยสิ่งนี้

ฉันใช้หนึ่งซับในนี้เพื่อแสดงรายการไฟล์และไดเรกทอรีที่ถูกติดตามในไดเรกทอรีปัจจุบันของสาขาปัจจุบัน:

ls --group-directories-first --color=auto -d $(git ls-tree $(git branch | grep \* | cut -d " " -f2) --name-only)

คุณอาจต้องการเพิ่มเป็นนามแฝง:

alias gl='ls --group-directories-first --color=auto -d $(git ls-tree $(git branch | grep \* | cut -d " " -f2) --name-only)'

หากคุณต้องการแสดงรายการไฟล์ซ้ำ:

'ls' --color=auto -d $(git ls-tree -rt $(git branch | grep \* | cut -d " " -f2) --name-only)

และนามแฝง:

alias glr="'ls' --color=auto -d \$(git ls-tree -rt \$(git branch | grep \\* | cut -d \" \" -f2) --name-only)"

นามแฝงคุณให้มองดูแปลกสักหน่อยดังนั้นฉันทำรุ่นที่สอดคล้องกับรูปแบบของนามแฝงแรกที่คุณมีให้:glr alias glr='ls --color=auto -d $(git ls-tree -rt $(git branch | grep \* | cut -d " " -f2) --name-only)'ทดสอบกับgit version 2.20.1Debian 10
baltakatei
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.