2015-12-29 12 views
5

Ho aggiunto alcuni file binari a un repository git su Ubuntu 14.04 linux, ho trasferito questi file su un GitHub remoto e li ho passati a cloni esistenti su OS X El Capitan e Windows 10. git status su OS X e Windows mostra alcuni di questi file come modificati anche se non sono stati toccati. Continua a mostrarli come modificati anche dopo git reset --hard e git checkout.Perché 'git status' mostra il file binario come modificato quando non lo è e le modalità file sono uguali

Nota, sto usando Git LFS (Large File Storage) con questi file.

Ecco l'output git diff su OS X, dove solo 1 file di mostra come modificato:

Marks-MacBook:KTX mark$ git diff other_lib/linux/Release-x64/libSDL2main.a 
diff --git a/other_lib/linux/Release-x64/libSDL2main.a b/other_lib/linux/Release-x64/libSDL2main.a 
index 4202f6f..2797199 100644 
Binary files a/other_lib/linux/Release-x64/libSDL2main.a and b/other_lib/linux/Release-x64/libSDL2main.a differ 

e

Marks-MacBook:KTX mark$ git diff --raw other_lib/linux/Release-x64/libSDL2main.a 
:100644 100644 4202f6f... 0000000... M other_lib/linux/Release-x64/libSDL2main.a 

file sono contrassegnati -text in .gitattributes quindi non ci dovrebbero essere problemi con marcatori EOL. Cos'altro potrebbe causare i diversi risultati di sha1 e git diff per segnalare i file binari differiscono?

ho aggiunto un diff=bin-.gitattributes per *.a file in cui usa le bintextconv = hexdump -v -C. Dopo questo, git diff non segnala differenze ma git status mostra ancora i file come modificati.

Come test aggiuntivo, ho copiato il file .a originale da linux su OS X e ho usato diff per confrontarlo con la copia nel mio albero di lavoro git. Sono identici. git status sul clone di repo di Linux segnala che il file dell'albero di lavoro, che ho copiato, non è stato modificato.

Qualche suggerimento?

Quanto segue non è più vero; il repository è stato risolto come descritto nella mia risposta.

Potete provare per voi stessi. Il repository & è in GitHub allo https://github.com/KhronosGroup/KTX/tree/incoming. Il file che mostra il problema su OS X è other_lib/linux/Release-x64/libSDL2main.a. Non ci sono problemi con nessuno degli altri file .a con other_lib/linux.

In Windows vengono mostrati alcuni file modificati come alcuni che sono collegamenti simbolici su Linux. Voglio concentrarmi sul caso OS X per ora poiché è più semplice.

+0

Hai configurato git-lfs correttamente sugli host Mac e Windows? –

+0

Forse questo è relativo agli accessi: http://stackoverflow.com/questions/1580596/how-do-i-make-git-ignore-file-mode-chmod-changes –

risposta

4

Ho capito il problema. Era con la configurazione sull'host Linux. Grazie a Edward Thomson per avermi chiesto di dare un'occhiata alle configurazioni git-lfs.

In esecuzione su git lfs init sull'host Linux, eliminare & aggiungendo nuovamente i file binari al repository e premendo sul telecomando è stato risolto il problema. Per caricare l'aggiornamento sugli host OS X e Windows, ho dovuto eseguire git reset --hard su di essi per ripristinare un commit senza i file offensivi.

Non avevo eseguito git lfs init, avendo pensato che questo passaggio sarebbe stato parte degli script eseguiti da apt-get install. Ciò significava che i file non erano effettivamente archiviati in LFS, perché i filtri sfumati e puliti sull'host Linux erano no-op, ma il file .gitattributes stava causando l'OS X e gli host Windows per eseguire il filtro sporchi LFS al momento del checkout.

+0

Puoi approfondire un po 'questo argomento? Ho lo stesso problema. Tutto funziona bene in OS X (non ho nemmeno bisogno di fare 'git lfs pull', semplicemente' git checkout' farà scendere automaticamente i file di grandi dimensioni). Ma quando clonato in Linux, 'git checkout' non scarica automaticamente i file e inoltre, se Iit git lfs pull', tutti vengono mostrati modificati ma non messi in scena in' git status'. – cjbottaro

+0

Poiché git lfs init non era stato eseguito su Linux, non esisteva il filtro Git LFS, quindi quando ho aggiunto nuovi file .a di grandi dimensioni, sono stati memorizzati nel repository git nel modo standard, cioè l'intero file anziché un collegamento. Poi li ho spinti a un telecomando e li ho portati su OS X. Su OS X in cui sono stati impostati i filtri GIT LFS, git diff ha eseguito il filtro pulito LFS che, presumo, ha cambiato il file in riferimento a un collegamento all'archivio LFS. Quindi il diff fallito perché stava confrontando il file completo memorizzato nel repository con il link allo storage LFS. Spero che questo ti aiuti. – msc

Problemi correlati