Git - รายชื่อไฟล์ทั้งหมดในปัจจุบันภายใต้การควบคุมแหล่งที่มา?


122

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

คำตอบ:


129

หากคุณต้องการแสดงรายการไฟล์ทั้งหมดสำหรับสาขาเฉพาะเช่นmaster:

git ls-tree -r master - ชื่อเท่านั้น

-rตัวเลือกที่จะปล่อยให้มัน recurse ลงในไดเรกทอรีย่อยและพิมพ์แต่ละไฟล์ในปัจจุบันภายใต้การควบคุมเวอร์ชัน คุณสามารถระบุHEADแทนmasterเพื่อรับรายการสาขาอื่น ๆ ที่คุณอาจเข้า

หากคุณต้องการดูรายการไฟล์ทั้งหมดที่มีอยู่ให้ดูที่นี่ :

บันทึก git --pretty = รูปแบบ: - ชื่อเท่านั้น --diff-filter = A | เรียงลำดับ -u

1
ขอบคุณ slhck สิ่งที่ฉันเป็นหลังจาก - และมีประโยชน์ที่จะรู้เกี่ยวกับคนที่สองเช่นกัน จะทำเครื่องหมายว่าถูกต้องใน 5 และครึ่งนาทีเมื่อฉันได้รับอนุญาต :-)
ไม่ประสงค์ออกนาม

3
ขอบคุณสำหรับคำตอบ. ฉันกำลังมองหาสิ่งนี้ โปรดทราบว่าgit ls-tree -r master --name-onlyจะทำเช่นเดียวกับตัวเลือกแรกโดยไม่ต้อง cutอาและคุณสามารถระบุHEADแทนmasterหากคุณต้องการรายการนี้สำหรับสาขาใด ๆ ที่คุณอยู่ในปัจจุบัน
maurits

6
วิ่ง "คอมไพล์ LS-ไฟล์" จะช่วยให้คุณประหยัดไม่กี่ตัวอักษร :)
Zain R

ทำไมถูกตัดให้ตอนจบ-? มันทำให้บางบรรทัดเพิ่มเติมเพื่อแสดงไฟล์บางไฟล์ในคอลัมน์ที่สองซึ่งซ้ำจากครั้งแรก
เอเดรียน

@ เอเดรียไม่มีความคิดคัดลอกกลับมาแล้วคงตอนนี้
slhck

61

git ls-filesคำสั่งจะทำสิ่งที่คุณต้องการ

ที่มา: http://www.kernel.org/pub/software/scm/git/docs/git-ls-files.html


4
git ls-filesแทนที่จะgit ls-tree -r master --name-onlyง่ายกว่าอย่างแน่นอน
karatedog

1
ขออภัยการแก้ไขของฉันไม่ถูกต้อง ในคอมไพล์ปัจจุบันไม่มีgit-ls-filesไบนารี มีgitไบนารีพร้อมกับls-filesคำสั่ง ลิงค์ไปยังเอกสารนั้นถูกต้องในเนื้อหา แต่ในทางเทคนิคสำหรับไบนารีที่ล้าสมัย
JonnyJD

@JonnyJD อาจทำเครื่องหมายว่าไม่ถูกต้องเนื่องจากการแก้ไขของคุณควรเป็นความคิดเห็น
Ascherer

1
@JonnyJD ทั้งหมด Git คนหน้ามีชื่อเป็นgit-commit, git-init, git-ls-filesฯลฯ แม้ว่าโปรแกรมเป็นจริง subcommands ไม่เคยมีgit-ls-filesไบนารีเป็นไปได้มากที่สุด เหตุผลก็คือมันสอดคล้องกับกลไกคำสั่งย่อยภายนอกซึ่งช่วยให้คุณสามารถลงทะเบียนgit fooคำสั่งโดยการเขียนgit-fooไบนารี
Radon Rosborough

4

git ls-files จะพิมพ์ไฟล์ในไดเรกทอรีการทำงานปัจจุบันเท่านั้น

ตัวอย่างเช่นหากคุณมี repo git สำหรับ dotfiles ( core.worktree = /) จากนั้นคุณจะมีไฟล์ที่อยู่นอกรูท git และคำสั่งง่ายๆนั้นจะไม่ทำงานอีกต่อไป

ในระยะสั้นสิ่งนี้จะได้ผล:

git --git-dir "`git rev-parse --git-dir`" \
    -C "`git config core.worktree || pwd`" \
    ls-files

ตัวอย่าง:

mkdir ~/dotfiles
cd ~/dotfiles
git config core.worktree /

# Ignore all files by default, else Git will find all files under "/"
echo "*" > .git/info/exclude

# Add files at the git repo's root and somewhere in the work tree
touch README
git add -f README
git add -f /etc/ssh/sshd_config

# `git status` would now print:
# new file:   ../../../etc/ssh/sshd_config
# new file:   README
git status

git commit -m "Initial commit"

# At this point, `git ls-files` prints only:
# README
git ls-files

# But you can print all files inside the work tree. This will print:
# etc/ssh/sshd_config
# home/yourusername/dotfiles/README
git --git-dir "`git rev-parse --git-dir`" -C "`git config core.worktree || pwd`" ls-files

หากคุณต้องการพา ธ ที่ระบุซึ่งสัมพันธ์กับไดเร็กทอรี (เชลล์) ปัจจุบันของคุณสิ่งนี้จะทำงาน:

alias gls='git ls-tree -r master --name-only HEAD "`git config core.worktree`"'

และในตัวอย่างด้านบนมันจะพิมพ์

README
../../../etc/ssh/sshd_config

ใน git v2.21 git ls-filesแสดงทั้งหมดในไดเรกทอรีปัจจุบันและด้านล่าง มันไม่แสดงไฟล์ที่ถูกลบใน repo
เอเดรียน

0

คุณยังสามารถใช้gitkโปรแกรมดูพื้นที่เก็บข้อมูลแบบโต้ตอบ


1
สิ่งนี้กล่าวถึงเครื่องมือ แต่ไม่ตอบ "วิธี" อย่างแท้จริง คุณสามารถขยายสิ่งนี้เป็นโซลูชั่นที่ดำเนินการได้หรือไม่? เพียงชี้คนในทิศทางการวิจัยเพื่อให้พวกเขาพัฒนาโซลูชันของตนเองมีความเหมาะสมมากกว่าเป็นความคิดเห็น ขอบคุณ จากบทวิจารณ์
fixer1234

-2

ภาพหน้าจอ

โปรดดูที่ภาพด้านขวามีแพทช์สองตัวเลือกและทรี หากคุณเลือกทรีคุณสามารถดูโครงสร้างโฟลเดอร์สำหรับแต่ละการกระทำ


โปรดพิจารณาความมุ่งมั่นที่ดีกว่าในการถ่ายภาพหน้าจอเพื่อที่คุณจะได้ไม่ต้องเซ็นเซอร์มากนัก
Thorbjørn Ravn Andersen
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.