Git non fa distinzione tra maiuscole e minuscole?


96

Nel primo impegno del mio parziale chiamato _Electronicsera scritto iniziando con una maiuscola, poi l'ho cambiato in _electronics.

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

Ora a volte cambia il _electronicsparziale impegnato in _Electronics.

Cosa ho fatto di sbagliato?


9
Che sistema operativo utilizzi?
Keith Thompson

10
Quale file system stai usando?
Andrew Marshall

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

Non sei contento che Windows abbia deciso di non fare distinzione tra maiuscole e minuscole?
Cascabel

4
Windows non fa distinzione tra maiuscole e minuscole, ma a volte (più frequentemente oggi) conserva maiuscole e minuscole .
Arafangion

Risposte:


73

Sarà visto come 2 cose diverse ma causerà problemi su un sistema che non fa distinzione tra maiuscole e minuscole. In questo caso, assicurati di completare con tabulazione eventuali percorsi o nomi di file. Inoltre, per cambiare il nome di qualcosa nel solo caso, fai 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 eseguendone il commit, quindi comprimendo i commit. Un modo più breve per farlo è 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"

Ciò è correlato anche alla regolazione dei nomi delle directory: git mv e cambia solo il caso della directory


sembra che questo fosse giusto (tranne che stavo cambiando da lettere maiuscole a downcase)
JAkk

Ho sbirciato dentro, finché sono abituato a cygwin, è solo più comodo usare cygwin - grazie per il suggerimento
JAkk

Puoi solo farlo git mv file.txt File.txt. Non sono sicuro che questa sia una nuova funzionalità di git.
Phil

107

Si sta andando a dipendere dal core.ignorecasevalore di configurazione, che è impostato per falso in file system case-sensitive e vero in msysgit su Windows.

core.ignorecase

Se true, questa opzione abilita varie soluzioni alternative per consentire a git di funzionare meglio su filesystem che non fanno distinzione tra maiuscole e minuscole, come FAT. Ad esempio, se un elenco di directory trova "makefile" quando git si aspetta "Makefile", git presumerà che sia realmente lo stesso file e continuerà a ricordarlo come "Makefile".

L'impostazione predefinita è false, eccetto che git-clone (1) o git-init (1) sonderà e imposterà core.ignorecase true se appropriato quando viene creato il repository.

Maggiori dettagli in questa risposta a Modifica delle lettere maiuscole dei nomi di file in Git .


79
Questa è la risposta corretta imo. Per me futuro, usa git config --unset-all core.ignorecase && git config --system core.ignorecase falsecon sudo.
Znarkus

2
idem a James, @Znarkus ha identificato la soluzione per questo problema su OS X, grazie!
Craig Nakamoto

1
@Znarkus Funziona anche su Windows. Bellissimo.
orlade

9
@Znarkus, il problema di farlo su OSX è che quando rinomini un file tramite il Finder e cambi solo il caso, git vedrà la versione rinominata come un file completamente nuovo, ma non genera una corrispondente "cancellazione" azione per la vecchia versione del file. Quindi, se esegui il commit e il push su GitHub, GitHub avrà sia il file vecchio che quello appena nominato, ma il tuo sistema locale avrà solo il nuovo file e git non sarà più saggio.
ivanreese

2
@spiralganglion Per lo sviluppo web su OSX posso davvero consigliare di creare una partizione sensibile al maiuscolo / minuscolo e quindi montarla come directory www.
Znarkus

23

Questo è molto più semplice:

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

1
Hai provato questo su un filesystem senza distinzione tra maiuscole e minuscole?
Edward Thomson

1
Inizialmente l'ho letto come il poster originale che cercava di eseguire una modifica del nome di una cartella, non di un file. Ora che ho riletto questo, non è chiaro. In effetti, mv -ffunzionerà per un file.
Edward Thomson

21
git config --system core.ignorecase false

0

Nel mio scenario avevo due cartelle testse Testsche mostravano due cartelle separate in Github ma una singola Testscartella in Windows. Il mio obiettivo era combinarli entrambi in tests.

Ho utilizzato il seguente approccio:

  1. Crea una nuova cartella temp
  2. Copia tutto il contenuto da Testsatemp
  3. Elimina Tests
  4. eseguire git rm Tests -r
  5. Rinomina tempintests

0

Ho provato a risolvere il problema ed è stato eseguito correttamente su Windows10

Supponiamo che ci siano due cartelle su bitbucket TEST e test ma quando clono il repo su disco crea solo TEST e voglio mantenere il test come singola cartella su git che contiene tutti i file.

Dovrò eseguire i seguenti comandi sulla riga di comando git mv TEST test1 -f git mv text1 test -f git commit -m "rinomina ..." git push

Ora vedrai che la gerarchia delle cartelle è corretta su bitbucket.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.