ฉันเปลี่ยนการใช้อักษรตัวพิมพ์ใหญ่ของไดเร็กทอรีและดูเหมือนว่า Git จะไม่ได้รับมัน


142

ฉันกำลังพัฒนาโปรเจ็กต์บน OS X Lion ที่อยู่ภายใต้การควบคุมเวอร์ชัน Git ฉันมีไดเรกทอรีตัวพิมพ์เล็กเหล่านี้แล้วจึงใช้ตัวพิมพ์ใหญ่ในภายหลัง (เช่น emailaddresses => EmailAddresses) แต่ดูเหมือนว่า Git จะไม่รับรู้การเปลี่ยนแปลง ยังคิดว่าไดเรกทอรีเป็นตัวพิมพ์เล็กเมื่อฉันเรียกใช้git ls-filesและคำสั่งอื่น ๆ

สิ่งนี้ไม่เป็นอันตรายหรือฉันควรทำอย่างอื่นเพื่อให้ Git รับการเปลี่ยนแปลงนี้



สิ่งนี้สร้างความสับสนให้ฉันเป็นเวลา 2 วัน ตอนนี้ฉันเข้าใจแล้ว Thnx สำหรับคำถามนี้
หมายเลข 945

คำตอบ:


201

คุณอาจใช้ตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ (แต่คงตัวพิมพ์เล็กและใหญ่) HFS + ฉันมักจะทำงานในลักษณะนี้:

$ git mv somename tmpname
$ git mv tmpname SomeName

1
นี่เป็นปัญหาเดียวกับที่ฉันมีและนี่คือสิ่งที่ฉันทำ
fernferret

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

9
หรือทำในคำสั่งเดียว: git mv --force somename SomeName (จากstackoverflow.com/a/16071375/217866 )
jackocnr

1
สำหรับการเปลี่ยนแปลงที่จะแสดงใน repo ระยะไกลคุณต้องทำgit push origin masterเช่นกัน หากคอมไพล์ปฏิเสธที่จะอัปเดตรีโมตคุณอาจต้องเพิ่มไฟล์ดัมมี่ (เช่นtouch stam) และทำการพุช ตามด้วยการลบ Stam ในภายหลังและกดอีกครั้ง
Rahav

2
สิ่งหนึ่งที่ควรทราบคือคุณต้องอยู่ในโฟลเดอร์ที่ไฟล์นี้ใช้งานได้ มันไม่ชัดเจนสำหรับฉันในตอนแรกและฉันยังคงได้รับ >>> แหล่งที่มาที่ไม่ดี, source = somename, destination = tmpname <<< เพราะฉันพยายามเรียกใช้คำสั่งจากรากของ repo
Parth Tamane

283

คุณสามารถบอกให้คอมไพล์พิจารณาคดีได้โดยเรียกใช้

git config core.ignorecase false


4
คำตอบที่ดีจริงๆหากคุณเปลี่ยนชื่อไฟล์โดยไม่ใช้ git mv --force หรือสคริปต์ CL อื่น ๆ ขอบคุณ!
MeanMatt

4
นี่เป็นคำตอบที่เหนือกว่าเพราะฉันไม่ได้รู้สึกเหมือน git mv'ing 200 ไฟล์ที่เปลี่ยนชื่อด้วยตนเอง!
Adam Reis

1
เห็นด้วยว่านี่น่าจะเป็นคำตอบอันดับต้น ๆ ขอบคุณ.
HomerPlata

1
ด้วยเหตุผลบางอย่างมันซ้ำไฟล์ทั้งหมดตอนนี้ฉันมีทั้งเวอร์ชันดั้งเดิมและเวอร์ชันที่มีการเปลี่ยนแปลงตัวพิมพ์ใหญ่ ...
Salatiel

1
@Salatiel ฉันเดาว่ามันซ้ำกันเมื่อคุณติดตามไฟล์อยู่แล้ว
Iggy

37

วิธีคอมไพล์ mv บน Mac Case-Sensitively

สิ่งนี้เกิดขึ้นเนื่องจาก Mac OS X ใช้คุณสมบัติการเก็บรักษาเคสและกรณีที่ไม่ไวต่อเคสที่มีไว้เพื่อช่วยคุณ

แม้ว่าคำแนะนำในการเปลี่ยนชื่อสองครั้งในคำตอบอื่น ๆ จะใช้ได้ผล แต่ฉันขอแนะนำให้ใช้ '--force' เพื่อผลลัพธ์แนวปฏิบัติที่ดีที่สุด:

$ git mv --force somename SomeName


หมายเหตุ: หากคุณลองโดยไม่มีตัวเลือกบังคับคอมไพล์จะทำให้คุณเป็นแบบนี้:

$ git mv somename SomeName
$ fatal: destination exists, source=somename, destination=SomeName

ในตัวอย่างข้างต้นคำสั่ง git ล้มเหลวและไม่มีการเปลี่ยนแปลงไฟล์ในระบบไฟล์หรือในดัชนีของ git


fatal: not under version controlตามคำสั่งแรกที่ฉันได้รับ
2540625

ข้อผิดพลาดร้ายแรงหมายความว่าคุณไม่มีที่เก็บ GIT ในตำแหน่งนั้น gitคำสั่งทำงานในไดเร็กทอรีที่มีที่เก็บ GIT เท่านั้น
David Manpearl

แต่ฉันอยู่ในไดเร็กทอรีย่อยของ Git repo ของฉัน ... ในที่สุดฉันก็แก้ไขด้วยคำตอบของ Taran BTW ขอบคุณ
2540625

19

ลองเปลี่ยนตัวเลือก git config core.ignorecase เป็น false ในไฟล์. gitconfig ของคุณ


4
หรือเขียนgit config core.ignorecase false
iforgotmypassword

2
@iforgotmypassword = คุณควรจะตอบ - ฉันจะโหวตให้คุณจริง
Abdeali Chandanwala

4

ขั้นตอนต่อไปนี้ช่วยฉันแก้ไขปัญหา:

  1. เปลี่ยนชื่อโฟลเดอร์เป็นtemp:

    mv Folder temp                  // It will rename your Folder to temp
    
  2. ขั้นตอนและกระทำ:

    git add .
    git commit -m "Temp"
    
  3. เปลี่ยนชื่อtempโฟลเดอร์ตามที่คุณต้องการ:

    mv temp folder        // It will rename temp folder to the name of your choice(folder)
    git add .
    git commit -m "Folder Fixed"
    

เสร็จสิ้น - คุณสามารถผลักดันได้แล้ว


1

ถ้าคุณทำgit mv AAA aaaหรือมันจะไม่ทำงานและคุณจะมีข้อผิดพลาดgit mv -f AAA aaafatal: renaming 'AAA' failed: Invalid argument

เพราะAAAและaaaเป็นบริษัท เดียวกับโฟลเดอร์ / ไฟล์ในกรณีตายระบบไฟล์ย้ายAAAจะaaaหมายถึงการย้ายเป็นAAAaaa/AAA

ดังนั้นคุณควรทำ

git mv AAA aaa.1
git mv aaa.1 aaa

ฉันหวังว่ามันจะเป็นประโยชน์สำหรับคุณ


1

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

For Exp, you want to change folder name from Base to base
1. mv Base base2
2. git add . && git commit -m "Fix folder name problem (wip)"
3. mv base2 base
4. git add . && git commit -m "Fixed folder name problem"

0

วิธีแก้ปัญหาเหล่านี้ไม่ได้ผลสำหรับฉัน SourceTree มักจะสร้างสาขาของฉันด้วยกรณีที่แตกต่างจากที่ฉันต้องการ ฉันแก้ไขได้อย่างไร:

1 - ดูไฟล์ git ของคุณใน Finder คุณสามารถทำได้โดยพิมพ์สิ่งนี้บนเทอร์มินัล:

- `defaults write com.apple.finder AppleShowAllFiles TRUE`
- `killall Finder`

2 - เปิดตัวค้นหาใหม่และไปที่ไดเรกทอรีโครงการของคุณ

3 - ตอนนี้เพียงแค่เปลี่ยนชื่อโฟลเดอร์ของคุณสมมติว่าจากคุณลักษณะเป็นคุณลักษณะ แล้วคุณไป


0

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


0

ฉันมีปัญหาเดียวกันและใช้วิธีแก้ปัญหาด้านล่าง ฉันใช้สิ่งนี้สำหรับการเปลี่ยนชื่อแบตช์ไดเร็กทอรีและไฟล์ ฯลฯ :

git rm -r --cached .
git add --all .
git commit -a -m "Versioning updated directory/file names"
git push origin master

ตามรายละเอียดที่นี่.


0

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

วิธีเดียวที่ฉันสามารถแก้ไขได้คือการลบสาขาในพื้นที่ของฉันและตรวจสอบจากรีโมต

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