.gitattributes
ไฟล์ส่วนใหญ่มี* text=auto
. จุดประสงค์ของtext=auto
ไฟล์นั้นคืออะไร?
.gitattributes
ไฟล์ส่วนใหญ่มี* text=auto
. จุดประสงค์ของtext=auto
ไฟล์นั้นคืออะไร?
คำตอบ:
จากเอกสาร :
แต่ละบรรทัดใน
.gitattributes
(หรือ.git/info/attributes
) ไฟล์มีรูปแบบ:pattern attr1 attr2 ...
ดังนั้นที่นี่แบบแผนคือซึ่งหมายความว่าทุกไฟล์และแอตทริบิวต์*
text=auto
อะไรtext=auto
ทำอย่างไร จากเอกสารประกอบ:
เมื่อข้อความถูกตั้งค่าเป็น "อัตโนมัติ" เส้นทางจะถูกทำเครื่องหมายสำหรับการทำให้เป็นมาตรฐานอัตโนมัติในตอนท้ายของบรรทัด หาก Git ตัดสินใจว่าเนื้อหาเป็นข้อความการลงท้ายบรรทัดจะถูกปรับให้เป็น LF เมื่อทำการเช็คอิน
พฤติกรรมเริ่มต้นคืออะไรหากไม่ได้เปิดใช้งาน?
ยังไม่ระบุ
หากไม่ระบุแอตทริบิวต์ข้อความ Git จะใช้ตัวแปรคอนฟิกูเรชัน core.autocrlf เพื่อพิจารณาว่าควรแปลงไฟล์หรือไม่
อะไรcore.autocrlf
ทำอย่างไร จากเอกสาร:
core.autocrlf
การตั้งค่าตัวแปรนี้เป็น "จริง" เกือบจะเหมือนกับการตั้งค่าแอตทริบิวต์ข้อความเป็น "อัตโนมัติ" ในทุกไฟล์ยกเว้นว่าไฟล์ข้อความจะไม่ได้รับการรับรองว่าจะทำให้เป็นมาตรฐาน: ไฟล์ที่มี CRLF ในที่เก็บจะไม่ถูกแตะต้อง ใช้การตั้งค่านี้หากคุณต้องการให้มีการสิ้นสุดบรรทัด CRLF ในไดเร็กทอรีการทำงานของคุณแม้ว่าที่เก็บจะไม่มีการสิ้นสุดบรรทัดที่เป็นมาตรฐาน ตัวแปรนี้สามารถตั้งค่าเป็นอินพุตได้ซึ่งในกรณีนี้จะไม่มีการแปลงเอาต์พุต
ถ้าคุณคิดว่าทั้งหมดนี้ชัดเจนเหมือนโคลนคุณไม่ได้อยู่คนเดียว
นี่คือสิ่งที่* text=auto
พูดในคำพูดของฉัน:เมื่อมีคนส่งไฟล์ Git จะเดาว่าไฟล์นั้นเป็นไฟล์ข้อความหรือไม่และถ้าเป็นเช่นนั้นไฟล์จะส่งไฟล์เวอร์ชันที่ไบต์ CR + LF ทั้งหมดถูกแทนที่ด้วยไบต์ LF ไม่มีผลโดยตรงกับไฟล์ที่มีลักษณะเป็นโครงสร้างการทำงานมีการตั้งค่าอื่น ๆ ที่จะแปลง LF ไบต์เป็น CR + LF ไบต์เมื่อตรวจสอบไฟล์
ฉันจะไม่แนะนำให้ใส่* text=auto
ใน.gitattributes
ไฟล์ ฉันขอแนะนำสิ่งนี้แทน:
*.txt text
*.html text
*.css text
*.js text
สิ่งนี้กำหนดอย่างชัดเจนว่าไฟล์ใดเป็นไฟล์ข้อความซึ่งได้รับ CRLF แปลงเป็น LF ในฐานข้อมูลอ็อบเจ็กต์ (แต่ไม่จำเป็นต้องอยู่ในโครงสร้างการทำงาน) เรามี repo ด้วย* text=auto
และ Git เดาผิดสำหรับไฟล์รูปภาพว่าเป็นไฟล์ข้อความทำให้ไฟล์เสียหายเนื่องจากแทนที่ CR + LF ไบต์ด้วย LF ไบต์ในฐานข้อมูลวัตถุ นั่นไม่ใช่เรื่องสนุกที่จะแก้ไขข้อบกพร่อง
หากคุณต้องใช้* text=auto
ให้ใส่เป็นบรรทัดแรก.gitattributes
เพื่อให้บรรทัดต่อมาสามารถแทนที่ได้ สิ่งนี้ดูเหมือนจะกลายเป็นแนวทางปฏิบัติที่ได้รับความนิยมมากขึ้นเรื่อย ๆ
everyone
หมายถึงgit-scm
มันอาจจะเป็นเพราะพวกเขากำลังพัฒนาแพคเกจ * ระวังและทำให้การใช้ตัวอักษร * ระวังการขึ้นบรรทัดใหม่เป็นปกติ
git-scm
มาจาก * nix MacOS ใช้ LF เฉพาะ Windows (พิจารณาจากระบบปฏิบัติการกระแสหลักเท่านั้น) ที่ใช้ CRLF ทำให้ยากขึ้นสำหรับ devs โดยใช้เครื่องมือ * nix บน Windows และสำหรับทุกคนเมื่อแลกเปลี่ยนไฟล์ ดูเพิ่มเติมทำไม CRLF
*.txt text=auto
และ*.txt text
โปรดได้ไหม? ฉันคิดว่าทั้ง 4 บรรทัดในตัวอย่างของคุณข้างต้นควรเป็นtext=auto
ไม่ใช่แค่text
หลังนามสกุลไฟล์ ไฟล์ KiCad footprint เช่น (นามสกุล ".kicad_mod") ถูกทำให้เป็นมาตรฐานโดยใช้บรรทัดนี้ในไฟล์ gitattributes: *.kicad_mod text=auto
( kicad-pcb.org/libraries/klc/G1.7 )
เพื่อให้แน่ใจว่าการสิ้นสุดบรรทัดเป็นแบบปกติ ที่มา: Kernel.org
เมื่อข้อความถูกตั้งค่าเป็น "อัตโนมัติ" เส้นทางจะถูกทำเครื่องหมายสำหรับการทำให้เป็นมาตรฐานอัตโนมัติในตอนท้ายของบรรทัด หากคอมไพล์ตัดสินใจว่าเนื้อหาเป็นข้อความการลงท้ายบรรทัดจะถูกปรับให้เป็น LF เมื่อทำการเช็คอิน
หากคุณต้องการทำงานร่วมกับระบบจัดการซอร์สโค้ดที่บังคับใช้ end-of-line normalization หรือคุณเพียงแค่ต้องการให้ไฟล์ข้อความทั้งหมดในที่เก็บของคุณถูกทำให้เป็นมาตรฐานคุณควรตั้งค่าแอตทริบิวต์ text เป็น "auto" สำหรับไฟล์ทั้งหมดแทน
สิ่งนี้ทำให้มั่นใจได้ว่าไฟล์ทั้งหมดที่คอมไพล์ถือว่าเป็นข้อความจะมีการลงท้ายบรรทัดแบบปกติ (LF) ในที่เก็บ
When a text file is normalized, its line endings are converted to LF in the repository.
LF
เดิมแม้กระทั่งบน Windows
การกำหนดค่านั้นขึ้นอยู่กับวิธีจัดการกับจุดสิ้นสุดบรรทัด เมื่อเปิดใช้งานปลายบรรทัดทั้งหมดจะถูกแปลงเป็น LF ในที่เก็บ มีแฟล็กอื่น ๆ เพื่อจัดการกับวิธีการแปลงส่วนท้ายบรรทัดในไดเร็กทอรีการทำงานของคุณ ดูข้อมูลทั้งหมดเกี่ยวกับปัญหาได้ที่นี่: https://www.kernel.org/pub/software/scm/git/docs/gitattributes.html