git ไม่คำนึงถึงขนาดตัวพิมพ์หรือไม่?


98

ในความมุ่งมั่นแรกของบางส่วนของฉันเรียกว่ามันถูกเขียนขึ้นต้นด้วยตัวอักษรทุนแล้วฉันเปลี่ยนไป_Electronics_electronics

Git ภายใต้ cygwin เพิกเฉยต่อกรณีหลังจากที่ยอมรับชื่อใหม่ดังนั้นฉันจึงเปลี่ยนชื่อด้วยมือใน repo เป้าหมาย

ตอนนี้บางครั้งมันก็เปลี่ยน_electronicsบางส่วนที่_Electronicsยืนยัน

ฉันทำอะไรผิด?


9
คุณใช้ระบบปฏิบัติการอะไร
Keith Thompson

10
คุณใช้ระบบไฟล์อะไร
Andrew Marshall

Windows พร้อม cygwin เซิร์ฟเวอร์ของฉันใช้ Ubuntu Linux ไม่ทราบระบบไฟล์ฉันเดาว่า ext3 หรือ ext2 - ผู้ให้บริการของฉันกำหนดค่าการติดตั้งขั้นต่ำ
JAkk

คุณดีใจหรือไม่ที่ Windows ตัดสินใจที่จะไม่คำนึงถึงตัวพิมพ์เล็กหรือใหญ่
Cascabel

4
Windows เป็นกรณีตาย แต่บางครั้ง (บ่อยครั้งมากขึ้นวันนี้) กรณีการรักษา
Arafangion

คำตอบ:


75

จะถูกมองว่าเป็น 2 สิ่งที่แตกต่างกัน แต่จะทำให้คุณเกิดปัญหาในระบบที่ไม่คำนึงถึงตัวพิมพ์เล็กและใหญ่ หากเป็นกรณีนี้ตรวจสอบให้แน่ใจว่าคุณกำลังเติมแท็บพา ธ หรือชื่อไฟล์ นอกจากนี้หากต้องการเปลี่ยนชื่อของบางสิ่งในกรณีนี้ให้ทำดังนี้:

mv file.txt temp.txt
git add -A
git commit -m "renaming..."
mv temp.txt File.txt
git add -A
git commit --amend -m "Renamed file.txt to File.txt"

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

git mv file.txt temp.txt
git mv temp.txt File.txt
git commit -m "Renamed file.txt to File.txt"

สิ่งนี้เกี่ยวข้องกับการปรับชื่อไดเร็กทอรีเช่นกัน: git mv และเปลี่ยนเฉพาะกรณีของไดเร็กทอรี


ดูเหมือนว่าจะถูกต้อง (ยกเว้นว่าฉันกำลังเปลี่ยนจากตัวพิมพ์ใหญ่เป็นตัวพิมพ์เล็ก)
JAkk

ฉันมองเข้าไปในนั้นตราบใดที่ฉันคุ้นเคยกับ cygwin การใช้ cygwin ก็สะดวกสบายมากขึ้น - ขอบคุณสำหรับคำใบ้
JAkk

git mv file.txt File.txtคุณก็สามารถทำ ไม่แน่ใจว่านี่เป็นฟีเจอร์คอมไพล์ใหม่หรือไม่
ฟิล

109

จะขึ้นอยู่กับcore.ignorecaseค่าคอนฟิกูเรชันซึ่งตั้งค่าเป็นเท็จในระบบไฟล์ที่คำนึงถึงตัวพิมพ์เล็กและใหญ่และจริงใน msysgit บน Windows

core.ignorecase

หากเป็นจริงตัวเลือกนี้จะเปิดใช้งานวิธีแก้ปัญหาต่างๆเพื่อให้ git ทำงานได้ดีขึ้นบนระบบไฟล์ที่ไม่คำนึงถึงขนาดตัวพิมพ์เช่น FAT ตัวอย่างเช่นหากรายชื่อไดเร็กทอรีพบ "makefile" เมื่อ git คาดว่าจะเป็น "Makefile" git จะถือว่าไฟล์นั้นเป็นไฟล์เดียวกันและยังคงจำเป็น "Makefile"

ค่าดีฟอลต์เป็นเท็จยกเว้น git-clone (1) หรือ git-init (1) จะโพรบและตั้งค่า core.ignorecase true หากเหมาะสมเมื่อสร้างที่เก็บ

รายละเอียดเพิ่มเติมในการตอบนี้เพื่อเปลี่ยนมูลค่าของชื่อไฟล์ใน Git


81
นี่คือคำตอบที่ถูกต้อง imo สำหรับฉันในอนาคตใช้git config --unset-all core.ignorecase && git config --system core.ignorecase falseกับ sudo
Znarkus

2
ถึงเจมส์ @Znarkus ได้ระบุการแก้ไขปัญหานี้บน OS X ขอบคุณ!
Craig Nakamoto

1
@Znarkus ทำงานบน Windows ด้วย สวย.
orlade

9
@Znarkus ปัญหาในการทำเช่นนั้นบน OSX คือเมื่อคุณเปลี่ยนชื่อไฟล์ผ่านตัวค้นหาและเปลี่ยนเฉพาะเคส git จะเห็นเวอร์ชันที่เปลี่ยนชื่อเป็นไฟล์ใหม่ทั้งหมด แต่จะไม่สร้าง "ลบ" ที่เกี่ยวข้อง การดำเนินการสำหรับไฟล์เวอร์ชันเก่า ดังนั้นหากคุณยอมรับและกดไปที่ github github จะมีทั้งไฟล์ชื่อเก่าและไฟล์ที่เพิ่งตั้งชื่อใหม่ แต่ระบบภายในของคุณจะมีไฟล์ใหม่และ git จะไม่มีอะไรฉลาดกว่า
ivanreese

2
@spiralganglion สำหรับนักพัฒนาเว็บบน OSX ฉันขอแนะนำให้สร้างพาร์ติชันที่มีความสำคัญกับตัวพิมพ์เล็กและใหญ่จากนั้นติดตั้งเป็นไดเรกทอรี www ของคุณ
Znarkus

23

ง่ายกว่ามาก:

git mv Electronics electronics -f
git commit -m "That was easy!"

1
คุณลองสิ่งนี้กับระบบไฟล์ที่ไม่คำนึงถึงขนาดตัวพิมพ์หรือไม่
Edward Thomson

1
ตอนแรกฉันอ่านสิ่งนี้ในฐานะผู้โพสต์ต้นฉบับที่พยายามเปลี่ยนชื่อโฟลเดอร์ไม่ใช่ไฟล์ ตอนนี้ฉันอ่านซ้ำแล้วก็ยังไม่ชัดเจน แน่นอนmv -fจะใช้งานได้กับไฟล์
Edward Thomson


0

ในสถานการณ์ของฉันฉันมีสองโฟลเดอร์testsและTestsแสดงเป็นสองโฟลเดอร์แยกกันใน Github แต่เป็นTestsโฟลเดอร์เดียวใน Windows เป้าหมายของฉันคือการรวมทั้งสองอย่างเข้าtestsด้วยกัน

ฉันใช้แนวทางต่อไปนี้:

  1. สร้างโฟลเดอร์ใหม่ temp
  2. คัดลอกเนื้อหาทั้งหมดจากTestsถึงtemp
  3. ลบ Tests
  4. ดำเนินการ git rm Tests -r
  5. เปลี่ยนชื่อtempเป็นtests

0

ฉันได้พยายามแก้ไขปัญหาและประสบความสำเร็จบน Windows10

สมมติว่ามีสองโฟลเดอร์ใน bitbucket TEST และทดสอบ แต่เมื่อฉันโคลน repo บนดิสก์มันจะสร้างเฉพาะ TEST และฉันต้องการทดสอบเป็นโฟลเดอร์เดียวบน git ซึ่งมีไฟล์ทั้งหมด

ฉันจะต้องดำเนินการคำสั่งต่อไปนี้ในบรรทัดคำสั่ง git mv TEST test1 -f git mv text1 test -f git คอมมิต -m "เปลี่ยนชื่อ ... " git push

ตอนนี้คุณจะเห็นว่าลำดับชั้นของโฟลเดอร์ได้รับการแก้ไขบน bitbucket

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.