2012-07-16 19 views
8

Ho il mio piccolo repository git personale sul mio laptop. Ho appena eseguito il commit delle modifiche e ho verificato che non ho nulla da impegnare: ogni file staged e modificato è stato eseguito.Perché dopo aver copiato il repository git in un'altra directory ho modificato i file?

Dopo che ho copiato tutti i file da questo repository in un'altra posizione e boom! Ho dei cambiamenti senza impegno.

Credo di mancare alcune regole fondamentali del git. Qualcuno mi può suggerire su questo?

+0

Intendi che anche la nuova copia sia un repository git? – bluesman

+1

Dovresti includere le informazioni che il repository originale era su Windows e la copia è su Ubuntu. Questo fa una grande differenza. Date queste informazioni, credo che la risposta dei parrhoyts sia corretta. – suvayu

+0

Does 'git diff' mostra le differenze effettive? O stai semplicemente visualizzando 'git status' dicendo che hai delle modifiche?Potresti scoprire che l'indice memorizza alcuni metadati su ciascun file - la copia ha data e ora differenti rispetto all'originale, quindi 'git' potrebbe segnalare che quei file non corrispondono più a ciò che l'indice pensa che dovrebbe essere lì, anche se i contenuti dei file potrebbe essere ancora identico. – twalberg

risposta

6

I file in Windows probabilmente hanno terminazioni di riga di avanzamento riga di ritorno a capo e probabilmente core.autocrlf è true sulla casella di Windows. Non copiarlo così tra piattaforme diverse. Creare invece un nuovo repository git sulla scatola linux e tirare dalla casella di Windows. È possibile utilizzare git bundle o git daemon sulla macchina Windows per esporre il repository. Oppure potresti creare un repository sulla scatola Linux e il file git push --mirror dalla macchina Windows, quindi clonare quello in cui vuoi che la versione finale finisca.

Oppure - è probabile che si possa già solo eseguire uno git reset --hard HEAD e correggerlo così come è nella casella Linux. Probabilmente dovresti eliminare prima tutto tranne la cartella .git per garantire un albero di lavoro completamente pulito.

1

Le autorizzazioni tra le cartelle cambiano? Git registrerà il cambio di permessi.

+1

Beh, non so esattamente cosa intendi ma ho copiato i file dalla macchina Win7 a Ubuntu se questo è importante. – Patryk

+0

Quali permessi per i file git track? [Questa domanda] (http://stackoverflow.com/questions/1071241/how-does-git-handle-folder-permission) suggerisce che non è così. Da dove vengono le tue informazioni? – simont

+0

Tiene traccia del bit eseguibile che penso possa essere impostato o disattivato automaticamente se accedi ai file system di Windows da Ubuntu/linux – leighman

1

La copia da Windows a Linux introduce una differenza nei diritti dei file, queste modifiche sono tracciate anche da git.

1

Sto affrontando lo stesso problema. Tuttavia ho copiato i file dal sistema host Linux a un sistema guest Virtual Box. Alcuni collegamenti vengono cancellati, mentre alcuni permessi sui file sono stati modificati, cosa che ho potuto correggere eseguendo git config core.filemode false.

9

Quello che ho fatto, eseguire

git diff | grep -B 2 @@ | grep +++ 

per ottenere i file effettivamente cambiato, poi fare ritornare su tutti gli altri

+0

Ha funzionato per me. Mostra i file che sono stati effettivamente modificati. Quindi verifica quelli elencati tramite lo stato git che non compaiono nel git diff –

0

Se non hai niente sulla scorta da perdere, fare:

git checkout .

Questo ripristinerà l'albero di lavoro al commit precedente

0

Se si dispone di più diramazioni e tutte le modifiche vengono applicate, questa soluzione potrebbe funzionare

Basta aggiungere e salvare tutte le modifiche che si vedono nel ramo corrente (ad esempio il master). Quindi checkout un altro ramo (ad esempio test) Elimina localmente il ramo master (con opzione -D). Estrarre il ramo principale da git

Fatto ..!

Problemi correlati