จะแสดงรายการไฟล์ทุกไฟล์สำหรับทุกการแก้ไขใน Git ได้อย่างไร (เช่น hg manifest ของ Mercurial - ทั้งหมด)?


10

Mercurial มีคำสั่งให้แสดงรายการทุกไฟล์ที่ที่เก็บมีไว้สำหรับการแก้ไขทุกครั้ง:

hg manifest --all

มีคำสั่งที่เทียบเท่าใน Git หรือไม่?


บางอย่างเช่นบันทึกคอมไพล์ - เริ่ม?
jmreicha

4
git ls-files?
NN

แค่อยากรู้อยากเห็นคุณต้องการสิ่งนี้ด้วยเหตุผลอะไร
Stephen Jennings

@StephenJennings: มันเป็นวิธีที่ดีกว่าที่จะรู้ว่าไฟล์ประเภทใดที่อยู่ภายใต้การควบคุมเวอร์ชันมากกว่าการทำจิตใจ " ls -Rลบ.gitignore" ประโยชน์ที่ได้รับโดยทั่วไป: คนหนึ่งอาจรู้มากกว่าหรือน้อยกว่าว่าเกิดอะไรขึ้น แต่วิปัสสนาของพื้นที่เก็บข้อมูลให้ความมั่นใจกับสิ่งที่รู้ โดยเฉพาะอย่างยิ่งสำหรับผู้ใช้ที่เริ่มต้นความมั่นใจดังกล่าวสร้างความแตกต่างอย่างมากในความพอใจของโปรแกรมที่จะใช้ Git ไม่ได้ให้ความสำคัญกับผู้ใช้เป็นอย่างมากซึ่งเป็นเหตุผลว่าทำไมคนจำนวนมากถึงเกลียดที่จะเข้าใจจนกระทั่งพวกเขาเรียนรู้
Esteis

คำตอบ:


3

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

ควรพิมพ์ไฟล์ทั้งหมดในคอมมิทซึ่งเป็นบรรพบุรุษของ HEAD ปัจจุบัน บันทึกไว้ในไฟล์ชื่อสถานที่manifest.shในเส้นทางของคุณ:

#!/bin/bash

TFILE=$(mktemp -t git-manifest)

for sha in $(git log --pretty=format:%H)
do
    git ls-tree --name-only --full-tree -r $sha >> $TFILE
done

sort -u $TFILE
rm $TFILE

1
ไม่จำเป็นexportเนื่องจากไม่จำเป็นต้องมีในกระบวนการลูก หากการวนซ้ำอยู่เหนือแฮช SHA การวนซ้ำก็ใช้งานได้ไม่เช่นนั้นการใช้readและการอ้างอิงตัวแปรจะดีกว่า sortมี-uตัวเลือกที่ทำในสิ่งที่uniqไม่ ไฟล์จะไม่ได้รับrmเมื่อคุณยกเลิกกลางคันคุณต้องใช้ไฟล์trapนั้น แต่อาจจะมากเกินไปสำหรับสคริปต์นี้
Daniel Beck

@DanielBeck: ขอบคุณฉันอัปเดตมันเล็กน้อย mktempไม่มีอยู่ใน Git Bash ฉันควรหาวิธีจัดการกับมันเพื่อให้ Windows สามารถเล่นได้เช่นกัน
Stephen Jennings
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.