2012-05-16 10 views
13

Modifica: git non ha problemi con la codifica dei caratteri. Questo è ancora qui per condividere le conoscenze ed evitare che altri facciano lo stesso errore.Cosa può causare git a complicarsi con la codifica dei caratteri?


Il contesto: La mia impresa utilizza un repository SVN. Sto usando git-svn come client per interagire con questo repository. Tutti i file di testo nel progetto sono (e devono essere) codificati con la codifica predefinita di Windows (cp -....). Io uso git-extensions e talvolta la riga di comando per pilotare git.

Cosa ho fatto: Durante gli ultimi 3 giorni, stavo lavorando a una nuova funzione e ho eseguito un numero di commit locali. Alla fine ho schiacciato tutti questi commit in uno solo usando un rebase interattivo, poi ho usato git svn dcommit per spingere tutto sul repository svn in un singolo commit.

Cosa è successo dopo: un collega mi ha detto che tutti gli accenti erano incasinati nei file che ho modificato e nei nuovi file dopo il mio commit. Avevo già commesso file di testo con accenti nello stesso repository con la mia installazione di git + svn prima, ed è la prima volta che affronto questo problema.

La mia indagine: Ho fatto le seguenti cose per indagare: aperti i file con notepad ++, e ha cercato le codifiche più correnti (incluse le finestre di default e UTF-8) per visualizzarle: nessuno di loro potrebbe visualizzare accenti correttamente, e gli accenti diversi sono sempre rappresentati dalla stessa sequenza di strani glifi.

La soluzione temporanea: ho creato rapidamente un ripristino di git con estensione git e "dcommited".

La domanda: Il mio repository aziendale SVN è OK, ma ora ho i due seguenti problemi da risolvere:

  1. capire cosa è successo con i caratteri con accenti
  2. recuperare il mio lavoro dal SVN storia e commetterlo in modo corretto (se possibile senza rivedere manualmente tutti i caratteri con accenti)

Qualcuno può fornire alcuni indizi (sono piuttosto nuovo di git)?

+1

Vuoi dire che i file di testo contenuti è stato cambiato, e non i percorsi? (Chiedo perché, come so, git-svn funziona con file come con l'array di byte). Quale versione di git-svn usi? –

+0

Sì, è il contenuto dei file che è stato modificato durante l'operazione, non i percorsi. Sto aggiornando non appena arriva una nuova versione, ma al momento non sono al lavoro. Ti dirò i numeri esatti delle versioni delle estensioni git e git non appena posso –

+0

Quando git-svn dcommita le modifiche al repository procede come segue: –

risposta

15

E ora riveliamo la dolorosa verità (dolorosa per il mio ego, non per gli utenti git): Ho fatto confusione con gli accenti, non git.

avrei potuto appena tolto la domanda che facciamo a torto pensare che git può rovinare con gli accenti, ma considerando il numero di upvotes, credo che un sacco di gente fare lo stesso errore che ho fatto, quindi non ho scelto di rispondere alla mia domanda per stabilire la verità, e forse aiutare le persone nello stesso caso:

  1. Git non tocca caratteri diversi dalle interruzioni di riga.
  2. Ho rotto gli accenti prima dell'impegno e non l'ho notato perché non ho prestato abbastanza attenzione. Per fare ciò, ho modificato alcuni file con Eclipse.Eclipse non ha riconosciuto la codifica e gli accenti sono stati tutti sostituiti da una strana sequenza di byte al salvataggio. È tutto.

Grazie ancora a Dmitry Pavlenko per avermi dato indicazioni su come indagare su questo problema.

+1 a "reflog Git" fissare

accento Felice; =)

+0

Sfortunatamente, Eclipse utilizza diversi valori di default per enconding su Linux e Windows. Questo da solo mi ha causato più problemi di qualsiasi altra cosa. –

Problemi correlati