ฉันได้อ่านคำถามและคำตอบที่แตกต่างกันมากมายใน Stack Overflow รวมถึงเอกสารgitว่าการตั้งค่าcore.autocrlfทำงานอย่างไร
นี่คือความเข้าใจของฉันจากสิ่งที่ฉันได้อ่าน:
Unix และ Mac OSX (pre-OSX ใช้ CR) ไคลเอ็นต์ใช้ปลายสาย LF
ไคลเอนต์ Windows ใช้การสิ้นสุดบรรทัด CRLF
เมื่อ core.autocrlf ถูกตั้งค่าเป็นจริงบนไคลเอนต์ที่เก็บ git มักจะเก็บไฟล์ในรูปแบบสิ้นสุดบรรทัด LF และสิ้นสุดบรรทัดในไฟล์บนไคลเอนต์จะถูกแปลงไปมาเมื่อตรวจสอบ / กระทำสำหรับลูกค้า (เช่น Windows) ที่ใช้ไม่ใช่ -LF การจบบรรทัดไม่ว่ารูปแบบไฟล์ไฟล์การจบบรรทัดจะอยู่บนไคลเอนต์ (ไม่เห็นด้วยกับคำจำกัดความของ Tim Clem - ดูการอัปเดตด้านล่าง)
นี่คือเมทริกซ์ที่พยายามจัดทำเอกสารเดียวกันสำหรับการตั้งค่า 'อินพุต' และ 'เท็จ' ของ core.autocrlf พร้อมเครื่องหมายคำถามซึ่งฉันไม่แน่ใจว่าพฤติกรรมการแปลงบรรทัดสิ้นสุดแล้ว
คำถามของฉันคือ:
- เครื่องหมายคำถามควรเป็นอย่างไร
- เมทริกซ์นี้ถูกต้องสำหรับ "เครื่องหมายที่ไม่ใช่คำถาม" หรือไม่?
ฉันจะอัปเดตเครื่องหมายคำถามจากคำตอบเนื่องจากดูเหมือนว่าจะเกิดขึ้น
ค่า core.autocrlf true อินพุต false -------------------------------------------------- -------- กระทำ แปลงหรือไม่ ? ใหม่ | ถึง LF (แปลงเป็น LF?) (ไม่มีการแปลง?) กระทำ เปลี่ยนเป็น ? ไม่ ที่มีอยู่ | การแปลง LF (แปลงเป็น LF?) ชำระเงิน เปลี่ยนเป็น ? ไม่ ที่มีอยู่ | CRLF (ไม่มีการแปลงหรือไม่) การแปลง
ฉันไม่ได้มองหาความคิดเห็นเกี่ยวกับข้อดีข้อเสียของการตั้งค่าต่างๆ ฉันแค่มองหาข้อมูลที่ทำให้ชัดเจนว่าจะคาดหวังได้อย่างไรว่าคอมไพล์จะทำงานกับการตั้งค่าทั้งสาม
-
อัปเดต 04/17/2012 : หลังจากอ่านบทความโดย Tim Clem ที่ลิงก์โดย JJD ในความคิดเห็นฉันได้แก้ไขค่าบางอย่างในค่า "ไม่ทราบ" ในตารางด้านบนรวมถึงการเปลี่ยน "เช็คเอาต์ที่มีอยู่ | จริงเพื่อแปลง เป็น CRLF แทนที่จะเปลี่ยนเป็นลูกค้า " นี่คือคำจำกัดความที่เขาให้ซึ่งชัดเจนกว่าสิ่งที่ฉันเคยเห็นที่อื่น:
core.autocrlf = false
นี่เป็นค่าเริ่มต้น แต่คนส่วนใหญ่ควรเปลี่ยนทันที ผลลัพธ์ของการใช้ false คือ Git ไม่เคยยุ่งกับการสิ้นสุดบรรทัดในไฟล์ของคุณ คุณสามารถเช็คอินไฟล์ด้วย LF หรือ CRLF หรือ CR หรือการผสมผสานแบบสุ่มของทั้งสามและ Git ไม่สนใจ สิ่งนี้อาจทำให้ยากต่อการอ่านและการรวมที่ยากขึ้น คนส่วนใหญ่ที่ทำงานในโลก Unix / Linux ใช้ค่านี้เพราะพวกเขาไม่มีปัญหา CRLF และพวกเขาไม่ต้องการให้ Git ทำงานพิเศษเมื่อไฟล์ถูกเขียนไปยังฐานข้อมูลวัตถุหรือเขียนลงในไดเรกทอรีการทำงาน
core.autocrlf = จริง
ซึ่งหมายความว่า Git จะประมวลผลไฟล์ข้อความทั้งหมดและตรวจสอบให้แน่ใจว่า CRLF ถูกแทนที่ด้วย LF เมื่อเขียนไฟล์นั้นไปยังฐานข้อมูลวัตถุและเปลี่ยน LF ทั้งหมดกลับเป็น CRLF เมื่อเขียนลงในไดเรกทอรีการทำงาน นี่เป็นการตั้งค่าที่แนะนำบน Windows เพราะจะช่วยให้แน่ใจว่าที่เก็บของคุณสามารถใช้บนแพลตฟอร์มอื่น ๆ ได้ในขณะที่ยังคง CRLF ไว้ในไดเรกทอรีทำงานของคุณ
core.autocrlf = อินพุต
ซึ่งหมายความว่า Git จะประมวลผลไฟล์ข้อความทั้งหมดและตรวจสอบให้แน่ใจว่า CRLF ถูกแทนที่ด้วย LF เมื่อเขียนไฟล์นั้นไปยังฐานข้อมูลวัตถุ อย่างไรก็ตามจะไม่ทำสิ่งที่ตรงกันข้าม เมื่อคุณอ่านไฟล์กลับจากฐานข้อมูลวัตถุและเขียนลงในไดเรกทอรีการทำงานพวกเขาจะยังมี LF เพื่อแสดงจุดสิ้นสุดของบรรทัด โดยทั่วไปการตั้งค่านี้จะใช้กับ Unix / Linux / OS X เพื่อป้องกัน CRLF จากการเขียนลงในที่เก็บ แนวคิดที่ว่าถ้าคุณวางโค้ดจากเว็บเบราว์เซอร์และนำ CRLFs ไปไว้ในไฟล์ใดไฟล์หนึ่งของคุณโดยไม่ตั้งใจ Git จะตรวจสอบให้แน่ใจว่ามันถูกแทนที่ด้วย LFs เมื่อคุณเขียนไปยังฐานข้อมูลวัตถุ
บทความของ Tim นั้นยอดเยี่ยมสิ่งเดียวที่ฉันคิดได้ว่าหายไปคือเขาถือว่าที่เก็บอยู่ในรูปแบบ LF ซึ่งไม่จำเป็นต้องเป็นจริงโดยเฉพาะกับโครงการ Windows เท่านั้น
การเปรียบเทียบบทความของทิมกับคำตอบที่ได้รับการโหวตสูงสุดโดย jmlane แสดงข้อตกลงที่สมบูรณ์แบบเกี่ยวกับการตั้งค่าที่แท้จริงและอินพุตและไม่เห็นด้วยกับการตั้งค่าที่ผิดพลาด
autocrlf
ผิดดูเหมือนง่ายกว่ามาก;) stackoverflow.com/questions/2333424/…