วิธีการเปลี่ยนการตั้งค่าการสิ้นสุดบรรทัด


581

มีไฟล์หรือเมนูที่จะให้ฉันเปลี่ยนการตั้งค่าเกี่ยวกับวิธีจัดการกับการจบบรรทัดหรือไม่?

ฉันอ่านมี 3 ตัวเลือก:

  1. ชำระเงินสไตล์ Windows คอมมิชชัน Unix

    Git จะแปลง LF เป็น CRLF เมื่อตรวจสอบไฟล์ข้อความ เมื่อส่งไฟล์ข้อความ CRLF จะถูกแปลงเป็น LF สำหรับโครงการข้ามแพลตฟอร์มนี่เป็นการตั้งค่าที่แนะนำบน Windows ("core.autocrlf" ถูกตั้งค่าเป็น "true")

  2. ชำระเงินตามสภาพกระทำสไตล์ Unix

    Git จะไม่ทำการแปลงใด ๆ เมื่อตรวจสอบไฟล์ข้อความ เมื่อส่งไฟล์ข้อความ CRLF จะถูกแปลงเป็น LF สำหรับโครงการข้ามแพลตฟอร์มนี่เป็นการตั้งค่าที่แนะนำสำหรับ Unix ("core.autocrlf" ถูกตั้งค่าเป็น "input")

  3. ชำระเงินตามสภาพกระทำกระทำตามสภาพ

    Git จะไม่ทำการแปลงใด ๆ เมื่อตรวจสอบหรือกระทำไฟล์ข้อความ ไม่แนะนำให้เลือกตัวเลือกนี้สำหรับโครงการข้ามแพลตฟอร์ม ("core.autocrlf" ถูกตั้งค่าเป็น "false")



3
ข้อใดเป็นค่าเริ่มต้น
Stephen

2
ไม่เป็นไรดูเหมือนว่าค่าเริ่มต้นจะเป็นจริงซึ่งฉันคิดว่าเหมาะสม
สตีเฟ่น

19
ฉันพบว่าตัวเลือก 3-rd นั้นใช้งานได้ดีกว่า มิฉะนั้นฉันมักจะอยู่ในสถานการณ์เมื่อฉันแก้ไขทั้งแบทช์และสคริปต์ sh บนแพลตฟอร์มเดียวกัน (Windows / Linux) จากนั้นให้คอมมิทและ Git "แก้ไข" การสิ้นสุดบรรทัดโดยอัตโนมัติสำหรับแพลตฟอร์มเดียว ... ไม่ฉันต้องการเป็นตัวของตัวเอง รู้ตัวเกี่ยวกับจุดสิ้นสุดของบรรทัดและกระทำ / ชำระเงินตามที่เป็น
JustAMartin

1
@ Neutrino ฉันหวังว่านี่เป็นจริง แต่ตัวอย่างหนึ่งของ IDE ที่ยุ่งกับตอนท้ายบรรทัดของคุณ (และไม่มีตัวเลือกการกำหนดค่าที่เหมาะสมเพื่อปิดการใช้งานนี้) คือ Visual Studio
Cássio Renan

คำตอบ:


528

วิธีปกติในการควบคุมสิ่งนี้ก็คือ git config

ตัวอย่างเช่น

git config --global core.autocrlf true

สำหรับรายละเอียดเลื่อนลงไปที่ลิงค์นี้เพื่อ Pro Gitไปยังส่วนชื่อ "core.autocrlf"


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

git config --global --edit

และไฟล์ git global config ควรเปิดในเท็กซ์เอดิเตอร์และคุณสามารถดูว่าไฟล์นั้นโหลดจากที่ใด


17
trueหรือfalseมีเพียงสองตัวเลือกตัวติดตั้งมีสาม
qwertymk

49
inputเป็นตัวเลือกที่ 3 (ตามที่ระบุในลิงก์ที่ฉันให้ไว้) 3 ตัวเลือกคือtrue| false| input
CodingWithSpike

2
นี่เป็นคำถามที่ดีอีกเรื่องหนึ่งในเรื่อง: stackoverflow.com/questions/3206843/…
CodingWithSpike

31
ที่จริงแล้วถ้าคุณอ่านคำถามของคุณเองอีกครั้งในข้อความที่คัดลอก / วาง: "1 ... ("core.autocrlf" is set to "true") ... 2 ... ("core.autocrlf" is set to "input") ... 3 ... ("core.autocrlf" is set to "false")"ดังนั้นโดยทั่วไปคุณตอบคำถามของคุณเอง? :)
CodingWithSpike

2
นี่เป็นวิธีเก่าที่จะไปรอบ ๆ มัน ดูไฟล์. gitattributes
eftshift0

176

รูปแบบการสิ้นสุดบรรทัดที่ใช้ในระบบปฏิบัติการ

  • Windows: CR(Carriage Return \r) และคู่LF(LineFeed \n)
  • OSX, Linux: LF(LineFeed \n)

เราสามารถกำหนดค่า git ให้เป็นรูปแบบการสิ้นสุดบรรทัดที่ถูกต้องโดยอัตโนมัติสำหรับแต่ละระบบปฏิบัติการในสองวิธี

  1. การกำหนดค่า Git Global
  2. ใช้.gitattributesไฟล์

การกำหนดค่าทั่วโลก

ใน Linux / OSX
git config --global core.autocrlf input

นี้จะแก้ไขใด ๆCRLFจะLFเมื่อคุณกระทำ

ใน Windows
git config --global core.autocrlf true

สิ่งนี้จะทำให้แน่ใจว่าเมื่อคุณชำระเงินใน windows ทุกอย่างLFจะถูกแปลงเป็นCRLF

.gitattributes ไฟล์

เป็นความคิดที่ดีที่จะเก็บ.gitattributesไฟล์ไว้ในขณะที่เราไม่ต้องการให้ทุกคนในทีมตั้งค่าคอนฟิกไว้ ไฟล์นี้ควรจะอยู่ในเส้นทางรากของ repo และถ้ามีอยู่หนึ่งคอมไพล์จะเคารพมัน

* text=auto

สิ่งนี้จะถือว่าไฟล์ทั้งหมดเป็นไฟล์ข้อความและแปลงเป็นบรรทัดสิ้นสุดของระบบปฏิบัติการเมื่อทำการเช็คเอาต์และกลับไปLFใช้ส่งโดยอัตโนมัติ หากต้องการบอกอย่างชัดเจนให้ใช้

* text eol=crlf
* text eol=lf

คนแรกคือการชำระเงินและคนที่สองคือการกระทำ

*.jpg binary

ถือว่า.jpgรูปภาพทั้งหมดเป็นไฟล์ไบนารีโดยไม่คำนึงถึงเส้นทาง ดังนั้นไม่จำเป็นต้องมีการแปลง

หรือคุณสามารถเพิ่มตัวระบุเส้นทาง:

my_path/**/*.jpg binary

3
แล้ว OS X ที่ใช้CR(carriage return) เพียงอย่างเดียวล่ะ
jww

23
มรดก MacOS (นั่นคือ MacOS 9 และก่อนหน้านี้) ที่ใช้CRเพียงอย่างเดียว แต่ OS X LFโดยทั่วไปการใช้งาน
Zachary Ware

2
ฉันสามารถใช้* text eol=lfสองครั้งเพื่อเช็คเอาต์ด้วยLFบน Windows ได้หรือไม่
mbomb007

1
ตามการตั้งค่าเอกสารประกอบ gitattributes* text=autoให้ git ตัดสินว่าเนื้อหาเป็นข้อความหรือไม่ การบังคับให้ไฟล์ทั้งหมดเป็นข้อความควรเป็น* textเพียง
Adrian W

ฉันจะตั้งค่าeol=crไฟล์ใน Mac OS 9 และแพลตฟอร์มดั้งเดิมอื่น ๆ ได้อย่างไร
NobleUplift

36

สำหรับโซลูชันการตั้งค่าที่เก็บที่สามารถแจกจ่ายให้กับนักพัฒนาทั้งหมดได้ให้ตรวจสอบแอตทริบิวต์ข้อความในไฟล์. gitattributes ด้วยวิธีนี้นักพัฒนาไม่จำเป็นต้องตั้งค่าการสิ้นสุดบรรทัดด้วยตนเองบนที่เก็บและเนื่องจากที่เก็บที่ต่างกันสามารถมีลักษณะการสิ้นสุดของบรรทัดที่ต่างกัน core.autocrlf ทั่วโลกจึงไม่ดีที่สุด

ยกตัวอย่างเช่น unsetting แอตทริบิวต์นี้บนเส้นทางที่กำหนด [ - ข้อความ] จะบังคับให้คอมไพล์ไม่แตะปลายเส้นเมื่อทำการเช็คอินและเช็คเอาท์ ในความเห็นของฉันนี่เป็นพฤติกรรมที่ดีที่สุดเนื่องจากเครื่องมือแก้ไขข้อความที่ทันสมัยที่สุดสามารถจัดการกับการจบบรรทัดทั้งสอง นอกจากนี้หากคุณในฐานะนักพัฒนาซอฟต์แวร์ยังคงต้องการทำการแปลงบรรทัดสุดท้ายเมื่อเช็คอินคุณยังสามารถตั้งค่าเส้นทางให้ตรงกับไฟล์บางไฟล์หรือตั้งค่าแอตทริบิวต์ eol (ใน. gitattributes) ในที่เก็บของคุณ

ตรวจสอบโพสต์ที่เกี่ยวข้องซึ่งอธิบายถึงไฟล์. gitattributes และแอตทริบิวต์ของข้อความโดยละเอียดยิ่งขึ้น: กลยุทธ์การจัดการ CRLF (carriage return, line line) ที่ดีที่สุดของ Git คืออะไร?


. - textให้is not a valid attribute name: .gitattributes:1โปรดใส่cat .gitattributes
jangorecki

3

สำหรับฉันกลอุบายอะไรที่รันคำสั่งอยู่

git config auto.crlf false

ภายในโฟลเดอร์ของโครงการฉันต้องการมันเป็นพิเศษสำหรับหนึ่งโครงการ

คำสั่งนั้นเปลี่ยนไฟล์ในพา ธ {project_name} /. git / config (fyi .git เป็นโฟลเดอร์ที่ซ่อนอยู่) โดยเพิ่มบรรทัด

[auto]
    crlf = false

ในตอนท้ายของไฟล์ ฉันคิดว่าการเปลี่ยนไฟล์ก็ทำแบบเดียวกัน


1

หากคุณต้องการแปลงกลับรูปแบบไฟล์ที่เปลี่ยนไปเป็นรูปแบบ UNIX จากรูปแบบพีซี

(1) คุณต้องติดตั้ง GIT ของเต่าใหม่และในส่วน "การแปลงสิ้นสุดบรรทัด" ตรวจสอบให้แน่ใจว่าคุณได้เลือกตัวเลือก "ชำระเงินตามที่เป็น - เช็คอินตามที่เป็นอยู่"

(2) และเก็บการกำหนดค่าที่เหลือตามที่มันเป็น

(3) เมื่อติดตั้งเสร็จแล้ว

(4) เขียนนามสกุลไฟล์ทั้งหมดที่ถูกแปลงเป็นรูปแบบ UNIX ลงในไฟล์ข้อความ (extensions.txt)

ex:*.dsp
   *.dsw

(5) คัดลอกไฟล์ลงในโคลนของคุณเรียกใช้คำสั่งต่อไปนี้ใน GITBASH

while read -r a;
do
find . -type f -name "$a" -exec dos2unix {} \;
done<extension.txt
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.