Ubah kasus file di Windows?

209

Ada beberapa file di basis kode yang dikontrol git yang ingin saya ganti namanya. Secara khusus, saya hanya ingin mengubah kasus file, jadi itu sourceCode.javamenjadi SourceCode.java, misalnya. Tangkapan: Saya di kotak Windows, dan sistem file berpikir itu adalah nama file yang sama.

Bagaimana saya bisa membuat Windows dan Git mengenali perubahan itu dan memeriksanya?

Electrons_Ahoy
sumber
3
Sejak Git 2.0.1+ (Juni 2014), yang sederhana git mvseharusnya berfungsi ( stackoverflow.com/a/24979063/6309 ). Bahkan di Windows.
VonC

Jawaban:

337

Lihat di sini untuk petunjuk lebih lanjut tentang cara melakukannya:

Bagaimana cara membuat git mengabaikan perubahan untuk jaga-jaga?

Atau:

git mv -f name.java Name.java
Igor Zevaka
sumber
8
Selain itu, ini tidak bekerja pada sistem file FAT. Saya membawa beberapa kode proyek di sekitar pada thumb drive dan perubahan kasus adalah rasa sakit yang nyata.
asm
1
Ini tidak bekerja untuk saya pada sistem NTFS dan Windows 10
Roboblob
1
Ini pasti cara yang tepat untuk melakukannya, tetapi, jika Anda perlu mengganti nama banyak file, ini mungkin membosankan. Jika Anda sudah mendapatkannya mengubah nama dalam sistem file entah bagaimana dan Anda hanya ingin melakukan perubahan itu, Anda dapat mengganti nama beberapa folder induk, melakukan salah satu git adddari folder yang baru diganti nama, JANGAN KOMIT, ubah nama folder kembali ke apa yang seharusnya. , git addlagi dan kemudian komit.
Okonomiyaki3000
Bekerja pada NTFS dan Windows 7.
Hans Goldman
Apakah mungkin melakukan ini secara massal? misalnya dengan PowerShell,Get-ChildItem '.' | Rename-Item {$_.Name.ToLowerCase()}
killjoy
49

Jika Anda menggunakan sistem file FAT, satu-satunya pilihan Anda adalah melakukan rename dua tahap:

  1. Ganti nama sourceCode.javamenjadianything.you.like
  2. Ganti nama anything.you.likemenjadiSourceCode.java

Kembali pada hari-hari ketika kami menggunakan Perforce kami memiliki masalah ini dan ini adalah satu-satunya solusi yang dapat kami buat.

ChrisF
sumber
13
Hanya catatan untuk orang lain: Tidak perlu untuk melakukan di-antara, tetapi perlu untuk menambah indeks agar git memperhatikan perubahan
arberg
29

Langkah-langkah berikut memungkinkan saya untuk mengubah kasing pada Windows:

  • Tambahkan ignorecase = falseke [core]dalam .git/config;
  • Pindahkan file yang akan Anda ganti namanya dari direktori proyek Anda;
  • Tambahkan menghapus ke indeks;
  • Pindahkan semua file kembali ke lokasi asalnya dan ubah wadah file dan / atau direktori;
  • Tambahkan semua file "baru" ke indeks;
  • Hapus ignorecase = falseditambahkan pada langkah pertama.

Dengan cara ini Anda memiliki satu komit yang berisi rename dan membuatnya mudah untuk mengubah misalnya seluruh direktori.

Pieter van Ginkel
sumber
5
Lakukan untuk memandikan pengaturan global dan lokal: $ gti config --global core.ignorecase false $ gti config core.ignorecase false
Roman Ivanov
6

Hati-hati. Melakukan hal ini dapat menyebabkan perubahan yang tidak mungkin untuk digabungkan. Git menjadi bingung ketika menggabungkan pada Windows karena tidak dapat memutuskan apakah nama Huruf besar yang lama dan nama huruf kecil yang baru adalah file yang sama atau tidak (untuk Git tidak, tetapi untuk sistem file itu). Untuk menggabungkan Anda harus melakukan beberapa solusi manual seperti menghapus file sebelum bergabung.

Lihat masalah Git rebase dengan file dengan nama yang sama tetapi case berbeda

Saya tidak yakin apakah masalah ini lebih buruk daripada memiliki file dengan nama yang tidak konvensional di proyek Anda selama-lamanya, tetapi perlu diketahui tentang apakah ada banyak pengguna dengan banyak cabang yang semuanya harus digabungkan pada akhirnya.

jwg
sumber
Nama file yang tidak konvensional dalam proyek sedang hingga besar harus selalu dihindari jika mungkin karena menyebabkan masalah ketika mengembangkan untuk beberapa platform (menunda memperbaiki sesuatu seperti itu sampai nanti akan membuat masalah dari perbaikan menjadi lebih parah). Kadang-kadang Anda mengembangkan di windows, tetapi juga perlu melakukan membangun linux, dan sebuah menyertakan yang akan bekerja dengan baik di windows menyebabkan build rusak di linux.
Griffork
3

Menurut saya satu cara sederhana hilang. Anda dapat melakukan ini untuk satu file, direktori tertentu atau bahkan seluruh repositori:

git rm --cached <file name or directory>
git add <file name or directory>

Jika Anda ingin mempengaruhi juga sub-direktori, Anda harus menggunakan -rflag:

git rm -r --cached <directory>
git add <directory>
Nils-o-mat
sumber
Benar-benar yang paling sederhana.
ranu
Ini kehilangan seluruh sejarah file, karena itu ditetapkan oleh git sebagai yang benar-benar baru.
Alejandro
@Alejandro Apa yang Anda katakan salah. Saya baru saja mengujinya dan git mengenali penggantian nama tanpa masalah. Seperti dalam kasus lain file tersebut ditampilkan sebagai dihapus / baru dalam indeks, tetapi saat melakukan, git pemberitahuan, bahwa itu baru saja diganti namanya.
Nils-o-mat
1

Dengan NTFS (atau FAT), satu git mvperintah tidak memecahkan masalah. Pertanyaan ini menunjukkan teknik yang berfungsi: git mv dan hanya mengubah case direktori

Rainer Blome
sumber