COVID-19 icon indicating copy to clipboard operation
COVID-19 copied to clipboard

Problema con pull del repository

Open svavassori opened this issue 4 years ago • 7 comments

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:

pull-failed

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

svavassori avatar Feb 10 '21 15:02 svavassori

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 ..." to update what will be committed) (use "git restore ..." to discard changes in working directory) deleted: metadata/covid-19-aree -comuni.xml modified: metadata/covid-19-aree -nuove - IT.xml deleted: metadata/covid-19-aree.xml deleted: metadata/covid-19-ita-ContrattiDPCPagamenti.xml deleted: metadata/covid-19-ita-andamento-nazionale.xml deleted: metadata/covid-19-monitoraggio.xml

no changes added to commit (use "git add" and/or "git commit -a")_

elcabesa avatar Feb 10 '21 17:02 elcabesa

sembra succedere tutte le volte che cambia l'utente che fa il merge, Pierluigi Cara e Umberto Rosini

elcabesa avatar Feb 10 '21 17:02 elcabesa

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.

svavassori avatar Feb 10 '21 23:02 svavassori

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(+)

miccoli avatar Feb 11 '21 13:02 miccoli

Confermo quanto descritto nei post precedenti. Ultimamente facendo un git checkout . prima del pull non mi è più capitato.

floatingpurr avatar Feb 14 '21 13:02 floatingpurr

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.

svavassori avatar Feb 17 '21 22:02 svavassori

Confermo quanto descritto nei post precedenti. Ultimamente facendo un git checkout . prima del pull non mi è più capitato.

Rettifico: questo tipo di strategia non risolve. Il problema continua a capitare nelle modalità descritte (e.g., a1479ecdfdad445254014d86df730c925c79b2ab)

floatingpurr avatar Apr 08 '21 17:04 floatingpurr