ตามที่ได้กล่าวไปแล้วหากต้องการแยกออกจากสถานะให้ใช้:
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