COVID-19
COVID-19 copied to clipboard
Problema con pull del repository
Tipo di issue:
- [ ] Dati mancanti o errati
- [ ] Errore nella documentazione
- [ ] Errore or mancanza nella dashboard
- [ ] Problemi di visualizzazione nella dashboard
- [x] Problema generale con il repository
Riassunto
Buorgiorno,
è da diverso tempo che, con una frequenza di circa 1 o 2 volte al mese, l'aggiornamento del repository con git pull
fallisce perché incontra delle differenze inconciliabili tra la copia locale e la remota. L'errore è simile a #630
Nel dettaglio, l'errore che mi da git è il seguente:
$ git pull
Aggiornamento di b8004b2..27a2474
error: Le tue modifiche locali ai seguenti file sarebbero sovrascritte con il merge:
metadata/covid-19-aree -nuove - IT.xml
Esegui il commit o lo stash delle modifiche prima di eseguire il merge.
Interrompo l'operazione
Posso escludere che sia dovuto a un problema locale perché il repository lo uso solo per leggere i dati in JSON e l'unica operazione che faccio è l'aggiornamento quotidiano con un cron, quindi il file XML non l'ho modificato.
Aggiungo che l'errore si manifesta sempre con i file XML della directory metadata
La struttura del branch che vedo è questa ed è la stessa ogni volta che mi salta questo errore:
Non so se sono l'unico con questo problema, ho provato più volte a ri-clonare il repository o con un hard-reset del branch, però il problema continua a riapparire.
Grazie. SV
stesso problema per me, anche io faccio solo pull e ogni pochi giorni questo è il risultato
remote: Enumerating objects: 25, done. remote: Counting objects: 100% (25/25), done. remote: Compressing objects: 100% (7/7), done. remote: Total 25 (delta 18), reused 25 (delta 18), pack-reused 0 Unpacking objects: 100% (25/25), 60.96 KiB | 138.00 KiB/s, done. From https://github.com/pcm-dpc/COVID-19 27a2474..a274c63 master -> origin/master Updating b8004b2..a274c63 error: Your local changes to the following files would be overwritten by merge: metadata/covid-19-aree -nuove - IT.xml Please commit your changes or stash them before you merge. Aborting
questo l'output di git status:
_git status On branch master Your branch is behind 'origin/master' by 5 commits, and can be fast-forwarded. (use "git pull" to update your local branch)
Changes not staged for commit:
(use "git add/rm
no changes added to commit (use "git add" and/or "git commit -a")_
sembra succedere tutte le volte che cambia l'utente che fa il merge, Pierluigi Cara e Umberto Rosini
Più che chi fa il merge
, credo dipenda da come si fa il merge/push
.
Quello che ho notato è che il commit di Cara è temporalmente antecedente a quello di Rosini. Immagino che Rosini abbia fatto il commit in locale e al inviarlo con push
gli sia saltato il conflitto e poi abbia fatto un merge
del branch. Tutto ciò è perfettamente normale e non causa problemi, anche se con un rebase
sarebbe più lineare.
Potrei sbagliarmi, ma osservando i messaggi dei commit (i.e. Merge branch 'master' of github.com:pcm-dpc/COVID-19), sembra che facciano il merge
del branch pubblico in un altro branch e che poi quest'ultimo diventi il nuovo master, invece di fare prima un rebase
del branch di privato sull'ultima versione del master e poi un altro merge
per pubblicare il lavoro.
Penso che sia il problema che ho descritto in #944, dovuto ai terminatori di linea, e confermo che dalla mia analisi si presenta spesso quando @pierluigicara fa un commit.
La storia è lunga, ma cerco di riassumere.
Se posiziono la mia HEAD su b8004b20, anche se non ho fatto nessuna modifica, risulta che un file è modificato:
$ git status
On branch master
Your branch is behind 'origin/master' by 5 commits, and can be fast-forwarded.
(use "git pull" to update your local branch)
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: metadata/covid-19-aree -nuove - IT.xml
no changes added to commit (use "git add" and/or "git commit -a")
L'assurdo è che questa modifica non può essere annullata:
$ git restore "metadata/covid-19-aree -nuove - IT.xml"
$ git status
On branch master
Your branch is behind 'origin/master' by 5 commits, and can be fast-forwarded.
(use "git pull" to update your local branch)
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: metadata/covid-19-aree -nuove - IT.xml
no changes added to commit (use "git add" and/or "git commit -a")
E a questo punto si è bloccati.
Il motivo è la bizzarra configurazione del terminatore di linea del file uploadato da @pierluigicara
$ git ls-files --eol metadata/covid-19-aree\ -nuove\ -\ IT.xml
i/mixed w/crlf attr/text eol=crlf metadata/covid-19-aree -nuove - IT.xml
che sull'index è mixed
, ma sul working tree è crlf
; inoltre i suoi attributi sono dichiarati text eol=crlf
.
In altre parole, sul mio sistema, git checkout
non è in grado di creare il file con le impostazioni richieste (che sono contraddittorie) e a questo punto il file risulta modificato, e ogni operazione di pull
fallisce miseramente.
Tanti fattori comportano questo problema, uno è la decisione di dichiarare in .gitattributes
tante estensioni con gli attributi text eol=crlf
.
*.csv text eol=crlf
*.md text eol=crlf
*.json text eol=crlf
*.geojson text eol=crlf
*.xml text eol=crlf
*.xmp text eol=crlf
LICENSE text eol=crlf
Ma @umbros perché?????? A cosa serve?
Un secondo fattore è che probabilmente l'interfaccia web di GitHub non verifica se il file che viene uploadato rispetta queste impostazioni, e perciò quando @pierluigicara carica i file dei metadati, questi assumono questi attributi impossibili.
workaround
L'unica soluzione che ho trovato è git reset --hard
(attenzione: comando nucleare :boom:, non fatelo a casa senza la supervisione di un git-wizard, non assumo responsabilità :wink:)
git fetch
git reset --hard origin/master
così facendo riesco a saltare oltre il commit che blocca.
Per fortuna infatti @umbros resetta i file ad uno stato accettabile
$ git log --stat -n2 metadata/covid-19-aree\ -nuove\ -\ IT.xml
commit 28977f9a1bec260f96d4675d0b779b8dfb52d388
Author: Umberto Rosini <[email protected]>
Date: Tue Feb 9 17:20:20 2021 +0100
2021-02-09
metadata/covid-19-aree -nuove - IT.xml | 1064 ++++++++++++++++----------------
1 file changed, 532 insertions(+), 532 deletions(-)
commit b5ef0bb498376a574ff171d8d7647088964ba400
Author: Pierluigi Cara - DPC <[email protected]>
Date: Mon Feb 8 13:40:06 2021 +0100
Add files via upload
metadata/covid-19-aree -nuove - IT.xml | 534 +++++++++++++++++++++++++++++++++
1 file changed, 534 insertions(+)
Confermo quanto descritto nei post precedenti. Ultimamente facendo un git checkout .
prima del pull
non mi è più capitato.
Grazie @miccoli per la dettagliata spiegazione e com'era prevedibile, domenica (14/02/2021) è successo nuovamente.
Credo che il cambio da fare al workflow che sta usando @pierluigicara è veloce e risolverebbe il problema alla radice, cosa che semplificherebbe anche a @umbros il suo lavoro.
Sarebbe utile sapere se @pierluigicara sta usando la web o un altro sistema.
Confermo quanto descritto nei post precedenti. Ultimamente facendo un
git checkout .
prima delpull
non mi è più capitato.
Rettifico: questo tipo di strategia non risolve. Il problema continua a capitare nelle modalità descritte (e.g., a1479ecdfdad445254014d86df730c925c79b2ab)