การเพิ่มไฟล์ที่ไม่ได้ติดตามเท่านั้น


168

หนึ่งในคำสั่งที่ฉันพบว่ามีประโยชน์อย่างเหลือเชื่อใน Git คือgit add -uการโยนทุกอย่างยกเว้นไฟล์ที่ไม่ได้ติดตามลงในดัชนี มีสิ่งที่ตรงกันข้ามหรือไม่? ในช่วงไม่กี่เดือนที่ผ่านมาฉันมักพบว่าตัวเองอยู่ในตำแหน่งที่ฉันได้เพิ่มการปรับปรุงบางอย่างในดัชนีและฉันต้องการเพิ่มไฟล์ที่ไม่ได้ติดตามทั้งหมดไปยังดัชนีนั้นก่อนที่จะส่งมอบ

มีวิธีการเพิ่มเฉพาะไฟล์ที่ไม่ได้ติดตามในดัชนีโดยไม่ต้องระบุทีละไฟล์หรือไม่? ฉันไม่เห็นสิ่งใดที่ชัดเจนในเอกสารช่วยเหลือ แต่บางทีฉันอาจพลาด

ขอบคุณ


1
เกี่ยวกับการ "โยนทุกอย่าง แต่ไฟล์ที่ไม่ได้ติดตามเข้าไปในดัชนี" ถูกออกแบบมาโดยเฉพาะสำหรับวัตถุประสงค์ที่ไม่.gitignore git add -u
Pacerier

นอกจากนี้คุณกำลังขอให้เพิ่มไฟล์ที่ไม่ได้ติดตามในขณะที่ลบไฟล์ที่ถูกติดตามทั้งหมดในขณะนี้หรือคุณกำลังขอให้เพิ่มไฟล์ที่ไม่ได้ติดตามที่ด้านบนของไฟล์ที่ถูกติดตามในปัจจุบัน
Pacerier

คำตอบ:


236

git add -iมันเป็นเรื่องง่ายด้วย พิมพ์a(สำหรับ "เพิ่ม untracked") จากนั้น*(สำหรับ "all") จากนั้นq(เพื่อออก) และคุณทำเสร็จแล้ว

หากต้องการทำด้วยคำสั่งเดียว: echo -e "a\n*\nq\n"|git add -i


4
ฉันหวังว่าจะมีบางอย่างที่น้อยกว่าดีมีการโต้ตอบ แต่มันก็ดีกว่า file by file แน่นอน :-)
Rob Wilkerson

34
echo -e "a\n*\nq\n"|git add -i
Mat

@ Mat ขอบคุณเป็นคำสั่งที่สมบูรณ์ ----> git add -ia * q ??
BKSpurgeon

Argument list too long... เฉียดฉิว!
ไซเมียน

1
สำหรับผมกับคอมไพล์ 2.21.0 มีที่เป็นgit add -iแล้ว4จะเพิ่มไม่ได้ติดตามแล้ว*ทั้งหมดแล้วqจะเลิก
แฮร์รี่ B

36

git ls-files -o --exclude-standard ให้ไฟล์ที่ไม่ได้ติดตามดังนั้นคุณสามารถทำสิ่งต่อไปนี้ (หรือเพิ่มชื่อแทน):

git add $(git ls-files -o --exclude-standard)

1
alias gau = "git ls-files -o --exclude-standard | xargs -i git เพิ่ม '{}'" ใช้งานได้สำหรับฉัน
Stephan

LS-ไฟล์คอมไพล์ --help ค่อนข้างอ่านที่มีประโยชน์: -o, --others Show other (i.e. untracked) files in the output
โจชัว KUNZMANN

15

ไม่ว่าสิ่งที่คุณกำลังมองหา แต่ฉันพบว่ามีประโยชน์มาก:

git add -AN

จะเพิ่มไฟล์ทั้งหมดลงในดัชนี แต่ไม่มีเนื้อหา ไฟล์ที่ไม่ได้ติดตามในขณะนี้จะทำงานเหมือนว่าถูกติดตาม เนื้อหาของพวกเขาจะถูกแสดงในและคุณสามารถเพิ่มแล้วโต้ตอบกับgit diffgit add -p


ตรงนี้เป็นสิ่งที่ฉันกำลังมองหา - อนุญาตให้git commit -pเดินผ่านไฟล์ใหม่ได้เช่นกัน
nitsujri

11

คุณสามารถเพิ่มสิ่งนี้ลงในไฟล์ ~ / .gitconfig ของคุณ:

[alias]
    add-untracked = !"git status --porcelain | awk '/\\?\\?/{ print $2 }' | xargs git add"

จากนั้นจาก commandline เพียงแค่เรียกใช้:

git add-untracked

ฉันชอบวิธีนี้ แต่ไม่รองรับช่องว่างในชื่อไฟล์
Paul Coccoli

9

คนมีปัญหาท่อส่งออกของgit ls-filesไปgit addแต่นี้จะล้มเหลวในกรณีที่มีชื่อไฟล์ที่มีช่องว่างหรือ glob *สีขาวตัวอักษรเช่น

วิธีที่ปลอดภัยจะใช้:

git ls-files -o --exclude-standard -z | xargs -0 git add

โดยที่-zบอกให้ git ใช้ตัว\0ยุติบรรทัดและ-0บอกให้ xargs เหมือนกัน ข้อเสียเพียงอย่างเดียวของวิธีการนี้คือ-0ตัวเลือกนั้นไม่ได้มาตรฐานดังนั้นจึงรองรับเฉพาะบางรุ่นxargsเท่านั้น


6

git ls-filesแสดงรายการไฟล์ในไดเรกทอรีปัจจุบัน หากคุณต้องการแสดงรายการไฟล์ที่ไม่ได้ติดตามจากที่ใดก็ได้ในทรีสิ่งนี้อาจทำงานได้ดีกว่า:

git ls-files -o --exclude-standard $(git rev-parse --show-toplevel)

ในการเพิ่มไฟล์ที่ไม่ได้ติดตามทั้งหมดในแผนผัง:

git ls-files -o --exclude-standard $(git rev-parse --show-toplevel) | xargs git add

6

ฉันลองสิ่งนี้และใช้งานได้:

git stash && git add . && git stash pop

git stashจะใส่เฉพาะไฟล์ที่ติดตามที่ถูกดัดแปลงทั้งหมดลงในสแต็กแยกต่างหากจากนั้นไฟล์ที่เหลือจะเป็นไฟล์ที่ไม่ได้ติดตาม จากนั้นทำตามgit add .ขั้นตอนจะไฟล์ทั้งหมดไฟล์ที่ไม่ได้ติดตามตามที่ต้องการ ในที่สุดเพื่อกลับไฟล์ที่แก้ไขทั้งหมดจาก stack โดยทำgit stash pop


0

ถ้าคุณมีหลายพันไฟล์ที่ไม่ได้ติดตาม (ฮึไม่ขอ) แล้วจะไม่ทำงานเมื่อมีการเพิ่มgit add -i คุณจะได้รับข้อผิดพลาดระบุ*Argument list too long

หากคุณใช้ Windows ด้วย (อย่าถาม # 2 :-) และจำเป็นต้องใช้ PowerShell เพื่อเพิ่มไฟล์ที่ไม่ได้ติดตามทั้งหมดคุณสามารถใช้คำสั่งนี้:

git ls-files -o --exclude-standard | select | foreach { git add $_ }

รุ่นย่อมากขึ้น:git ls-files -o --exclude-standard | % { git add $_ }
marckassay

0

เคล็ดลับดี ๆ มากมายที่นี่ แต่ภายใน Powershell ฉันไม่สามารถทำงานได้

ฉันเป็นนักพัฒนา. NET และเรายังคงใช้ Windows OS เป็นหลักเนื่องจากเราไม่ได้ใช้. Net core และ cross platform มากดังนั้นการใช้ Git ในชีวิตประจำวันของฉันอยู่ในสภาพแวดล้อมของ Windows ที่เชลล์ใช้บ่อย Powershell ไม่ใช่ Git ทุบตี

สามารถปฏิบัติตามขั้นตอนต่อไปนี้เพื่อสร้างฟังก์ชัน aliased สำหรับการเพิ่มไฟล์ที่ไม่ได้ติดตามในที่เก็บ Git

ภายในไฟล์ $ โปรไฟล์ของ Powershell (ในกรณีที่มันหายไป - คุณสามารถเรียกใช้: โปรไฟล์ $ รายการใหม่)

notepad $ โปรไฟล์

ตอนนี้เพิ่มวิธี Powershell นี้:

function AddUntracked-Git() {
 &git ls-files -o --exclude-standard | select | foreach { git add $_ }
}

บันทึกไฟล์ $ profile และโหลดใหม่ลงใน Powershell จากนั้นโหลดไฟล์ $ profile อีกครั้งด้วย: $ รายละเอียด

สิ่งนี้คล้ายกับคำสั่ง source ในสภาพแวดล้อม * nix IMHO

ดังนั้นในครั้งต่อไปหากคุณเป็นนักพัฒนาที่ใช้ Powershell ใน Windows กับ Git repo และต้องการรวมไฟล์ที่ไม่ได้ติดตามคุณสามารถเรียกใช้:

AddUntracked-Git

สิ่งนี้เป็นไปตามอนุสัญญา Powershell ที่คุณมีคำกริยาคำนาม


0

คอมไพล์เพิ่ม (เพิ่มไฟล์ทั้งหมดในไดเรกทอรีนี้)

git add -all (เพิ่มไฟล์ทั้งหมดในไดเรกทอรีทั้งหมด)

git add -N จะมีประโยชน์สำหรับรายการที่จะใช้ในภายหลัง ....


git add -uจะเพิ่มไฟล์ที่แก้ไขแล้วซึ่งไม่ได้ติดตาม
Tarasovych

-3

ในการเพิ่มคำสั่ง git ไฟล์ที่ไม่ได้ติดตามทั้งหมดคือ

git เพิ่ม -A

นอกจากนี้หากคุณต้องการรับรายละเอียดเพิ่มเติมเกี่ยวกับตัวเลือกที่มีอยู่หลากหลายคุณสามารถพิมพ์คำสั่ง

git เพิ่ม -i

แทนคำสั่งแรกด้วยสิ่งนี้คุณจะได้รับตัวเลือกเพิ่มเติมรวมถึงตัวเลือกในการเพิ่มไฟล์ที่ไม่ได้ติดตามทั้งหมดที่แสดงด้านล่าง:

$ git เพิ่ม -i คำเตือน: LF จะถูกแทนที่ด้วย CRLF ใน README.txt ไฟล์จะมีการสิ้นสุดบรรทัดต้นฉบับในไดเรกทอรีการทำงานของคุณ คำเตือน: LF จะถูกแทนที่ด้วย CRLF ใน package.json

* คำสั่ง * 1: สถานะ 2: อัปเดต 3: ย้อนกลับ 4: เพิ่ม untracked 5: แพทช์ 6: diff 7: ออกจาก 8: ช่วยอะไรตอนนี้> a

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