ดังที่ได้กล่าวไว้ใน " git: ฉันจะเพิ่มไฟล์ทั้งหมดซ้ำ ๆ ในทรีย่อยของไดเรกทอรีที่ตรงกับรูปแบบ glob ได้อย่างไร " ถ้าคุณหลบหนีหรืออ้างคำพูดของคุณเป็นอย่างดี spsp globbing (เช่น'*.java'
) แล้วใช่เพิ่มคอมไพล์'*.java'
Git 2.13 (Q2 2017) ปรับปรุงให้ดีขึ้นสำหรับการเพิ่มแบบโต้ตอบ:
ดูกระทำ 7288e12 (14 มีนาคม 2017) โดยเจฟฟ์คิง (peff
)
(รวมโดยJunio C Hamano - gitster
-ในการกระทำ 153e0d7 , 17 มีนาคม 2017)
add --interactive
: ห้ามขยาย pathspecs ด้วย ls-files
เมื่อเราต้องการได้รับรายชื่อไฟล์ที่ถูกแก้ไขอันดับแรกเราจะขยาย pathspecs ที่ผู้ใช้กำหนดด้วย " ls-files
" จากนั้นฟีดรายการพา ธ ผลลัพธ์ที่ได้จะเป็นอาร์กิวเมนต์ของ " diff-index
" และ " diff-files
"
หากเส้นทางของคุณขยายไปสู่เส้นทางจำนวนมากคุณอาจพบปัญหาข้อใดข้อหนึ่งดังนี้
ระบบปฏิบัติการอาจบ่นเกี่ยวกับขนาดของรายการอาร์กิวเมนต์และปฏิเสธที่จะทำงาน ตัวอย่างเช่น:
$ (ulimit -s 128 && git add -p drivers)
Can't exec "git": Argument list too long at .../git-add--interactive line 177.
Died at .../git-add--interactive line 177.
ที่อยู่ในlinux.git
พื้นที่เก็บข้อมูลซึ่งมีไฟล์ประมาณ 20K ในไดเรกทอรี "drivers" (ไม่มีไฟล์ใดที่แก้ไขในกรณีนี้) "การulimit -s
" เคล็ดลับเป็นสิ่งจำเป็นที่จะแสดงปัญหาบน Linux แม้สำหรับเช่นชุดขนาดยักษ์ของเส้นทาง
ระบบปฏิบัติการอื่นมีขีด จำกัด ที่น้อยกว่ามาก (เช่นกรณีที่เกิดขึ้นจริงกับไฟล์ 5K บน OS X เท่านั้น)
แม้ว่ามันจะใช้งานได้มันก็ช้าจริงๆ รหัส pathspec ไม่ได้รับการปรับให้เหมาะสมกับเส้นทางจำนวนมาก นี่เป็นกรณีเดียวกันโดยไม่มี ulimit:
$ time git add -p drivers
No changes.
real 0m16.559s
user 0m53.140s
sys 0m0.220s
เราสามารถปรับปรุงสิ่งนี้ได้โดยการข้าม " ls-files
" อย่างสมบูรณ์และเพียงป้อนพา ธ สเปคดั้งเดิมไปยังคำสั่ง diff
ในอดีตภาษาพา ธ สเปคที่รองรับโดย " diff-index
" นั้นอ่อนแอกว่า แต่ก็ไม่เป็นเช่นนั้นอีกต่อไป