2011-12-12 1 views
72

Nel primo impegno del mio parziale chiamato _Electronics è stato scritto a partire da una lettera maiuscola, quindi l'ho modificato in _electronics.Git non fa distinzione tra maiuscole e minuscole?

Git sotto cygwin ha ignorato il caso dopo aver eseguito il nuovo nome, quindi ho cambiato il nome a mano nel repository di destinazione.

Ora a volte cambia il _electronics commutato parziale a _Electronics.

Cosa ho fatto di sbagliato?

+8

Che sistema operativo stai? –

+9

Quale file system stai usando? –

+0

Windows con cygwin. Il mio server esegue Ubuntu Linux. Non conosco il file system, suppongo ext3 o ext2 - il mio provider ha configurato l'installazione minima. – JAkk

risposta

64

Sarà visto come 2 cose diverse ma causerà problemi su un sistema senza distinzione tra maiuscole e minuscole. In questo caso, assicurati di aver completato la tabulazione dei percorsi o dei nomi di file. Inoltre, per cambiare il nome di qualcosa in un solo caso, fare questo:

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" 

questo è un modo esplicito di apportare modifiche commetterli, poi crollare i commit. Un modo più breve per farlo è quello di manipolare l'indice e la cartella di lavoro tutto in uno:

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

Questo è legato alla regolazione nomi delle directory così: git mv and only change case of directory

+0

sembra che questo fosse giusto (tranne che stavo cambiando dalle lettere maiuscole al downcase) – JAkk

+0

Hai provato msysgit su Windows? –

+0

L'ho sbirciato, finché sono abituato a cygwin, usare Cygwin è più comodo, grazie per il suggerimento – JAkk

87

Si sta per dipendere dal valore di configurazione core.ignorecase , che è impostato su false in file system sensibili al maiuscolo/minuscolo e true in msysgit su Windows.

core.ignorecase

Se fosse vero, questa opzione consente varie soluzioni alternative per consentire git di lavorare meglio su filesystem che non sono case sensitive, come il grasso. Per esempio , se un elenco di directory trova "makefile" quando git si aspetta "Makefile", git assumerà che è davvero lo stesso file, e continua per ricordarlo come "Makefile".

L'impostazione predefinita è false, tranne git-clone (1) o git-init (1) eseguirà il probe e imposta core.ignorecase true se appropriato quando viene creato il repository .

+65

Questa è la risposta corretta imo. Per il futuro, usa 'git config --unset-all core.ignorecase && git config - core di sistema.ignorecase false' con sudo. – Znarkus

+0

@Znarkus Su OS X, il tuo codice era ESATTAMENTE quello di cui avevo bisogno. Grazie! –

+1

idem to James, @Znarkus ha identificato la correzione per questo problema su OS X, grazie! –

21

Questo è molto più facile:

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

Hai provato questo su un filesystem senza distinzione tra maiuscole e minuscole? –

+2

@Edward yes, OS X – Arnoud

+1

Inizialmente ho letto questo come poster originale cercando di eseguire un cambio di nome di una cartella, non un file. Ora che ho riletto questo, non è chiaro. Infatti, 'mv -f' funzionerà per un file. –

18
git config --system core.ignorecase false