2012-12-11 15 views
7

Sto facendo un rebase git e sono bloccato perché in un commit ho una cartella chiamata Proto, ma nell'altro commit ho una cartella chiamata proto. È stato un errore onesto e avrebbe dovuto essere Proto in entrambi i casi. Il meglio che riesco a capire qui è provare a eliminare la cartella da entrambi i commit e poi provare di nuovo il rebase, ma ci deve essere un modo migliore.Come posso risolvere un conflitto di maiuscole tra cartelle con Git su Windows?

In passato, quando ho incontrato problemi di maiuscole con un file, ho usato git mv, ma con la cartella non mi permette di eseguire git mv, e non so perché.

Qual è il modo corretto per risolvere un problema di maiuscole delle cartelle in git su Windows?

risposta

1

La registrazione di contrabbando di cartelle nella cronologia di Git è difficile, perché le cartelle non vengono tracciate, solo i file nelle cartelle. Supponendo che si desidera rinominare oldFolder a oldfolder si potrebbe provare la seguente:

  1. Rebase modo interattivo dal punto in cui hai creato un file in oldFolder. Modifica ogni commit che aggiunge file a questa cartella. Quando il rebase interattivo si interrompe, creare newFolder ed eseguire git mv oldFolder/* newFolder/. Fai il secondo per ogni fermata del rebase interattivo.

  2. Ovviamente, non è possibile avere oldFolder e newFolder due versioni in maiuscole diverse della stessa parola in Windows. Quindi, ripetere il passaggio 1 per rinominare newFolder in oldfolder.

+0

Grazie per l'aiuto, ho dovuto tornare indietro ed eliminare la cartella da un ramo, eseguire il rebase, quindi aggiungere manualmente i file in post rebase. –

0

[Edited] Ho il sospetto che è necessario "git mv" ogni file nella cartella a un nome temporaneo come 'Protox', poi "git mv" i file temporanei nome a 'Proto', come Git non traccia le cartelle da solo - solo i file nelle cartelle.

Il doppio "git mv" funziona attorno ai file system senza distinzione tra maiuscole e minuscole di Windows. (Dovresti essere in grado di passare direttamente da "proto" a "Proto" su file system sensibili al maiuscolo/minuscolo, come Linux.)

8

Abbiamo riscontrato un problema simile nel nostro repository git su Windows quando un gran numero di file sono stati spostati a diverse directory.

Ho risolto il problema la prima volta manualmente clonando il repository su una macchina virtuale Linux e eseguendo uno script di bash con i comandi git mv per risolvere il problema del caso del percorso del file. Questo è stato un processo doloroso quindi ho deciso di sviluppare un'utilità che automatizza il processo.

Git Unite è un'applicazione di console .NET che ho scritto utilizzando la libreria libgit2sharp. Il programma identifica tutte le voci dell'indice git con il caso del percorso del file diverso da ciò che riporta il file system di Windows.

ho scritto un post di blog in dettaglio lo strumento, l'utilizzo, e la storia dietro di esso a Git Unite - Fix Case Sensitive File Paths on Windows

+1

Grazie mille per questo strumento! Ci ha permesso di risparmiare un paio d'ore per riparare manualmente il nostro deposito disordinato. –

+0

Grazie mille amico.È stato molto utile per noi qui! È efficace e semplice da usare –

Problemi correlati