ตามที่ได้กล่าวไปแล้วหากต้องการแยกออกจากสถานะให้ใช้:
git status -uno # must be "-uno" , not "-u no"
หากคุณต้องการละเว้นไฟล์ที่ไม่ได้ติดตามอย่างถาวรคุณสามารถเปิดใช้งานจากรากของโครงการของคุณ:
git status --porcelain | grep '^??' | cut -c4- >> .gitignore
การเรียกที่ตามมาทุกครั้งgit statusจะเพิกเฉยต่อไฟล์เหล่านั้นอย่างชัดเจน
อัปเดต : คำสั่งด้านบนมีข้อเสียเปรียบเล็กน้อย: หากคุณไม่มี.gitignoreไฟล์ แต่ gitignore ของคุณจะเพิกเฉย! สิ่งนี้เกิดขึ้นเนื่องจากไฟล์.gitignoreถูกสร้างขึ้นก่อนที่git status --porcelainจะดำเนินการ ดังนั้นหากคุณยังไม่มี.gitignoreไฟล์ฉันขอแนะนำให้ใช้:
echo "$(git status --porcelain | grep '^??' | cut -c4-)" > .gitignore
สิ่งนี้จะสร้าง subshell ที่เสร็จสมบูรณ์ก่อนที่.gitignoreไฟล์จะถูกสร้างขึ้น
คำอธิบายคำสั่งเมื่อฉันได้รับคะแนนโหวตเป็นจำนวนมาก (ขอบคุณ!) ฉันคิดว่าฉันควรอธิบายคำสั่งนี้หน่อยดีกว่า:
git status --porcelainถูกใช้แทนgit status --shortเนื่องจากสถานะด้วยตนเอง "ให้เอาต์พุตในรูปแบบที่ง่ายต่อการแยกวิเคราะห์สำหรับสคริปต์ซึ่งคล้ายกับเอาต์พุตสั้น ๆ แต่จะคงที่ในเวอร์ชันคอมไพล์และไม่คำนึงถึงการกำหนดค่าของผู้ใช้" ดังนั้นเราจึงมีทั้งการแยกวิเคราะห์และความเสถียร
grep '^??'กรองเฉพาะบรรทัดที่ขึ้นต้นด้วย??ซึ่งตามคู่มือสถานะคอมไพล์สอดคล้องกับไฟล์ที่ไม่ได้ติดตาม
cut -c4- ลบอักขระ 3 ตัวแรกของทุกบรรทัดซึ่งทำให้เรามีเพียงพา ธ สัมพัทธ์ไปยังไฟล์ที่ไม่ได้ติดตาม
|สัญลักษณ์ท่อซึ่งผ่านการส่งออกของคำสั่งก่อนหน้าเพื่อป้อนคำสั่งดังต่อไปนี้;
>>และ>สัญลักษณ์ประกอบการเปลี่ยนเส้นทางซึ่งผนวกผลลัพธ์ของคำสั่งก่อนหน้านี้ไปยังแฟ้มหรือเขียนทับ / สร้างไฟล์ใหม่ตามลำดับ
ตัวแปรอื่นสำหรับผู้ที่ต้องการใช้sedแทนgrepและcutนี่เป็นอีกวิธีหนึ่ง:
git status --porcelain | sed -n -e 's/^?? //p' >> .gitignore