[Python] #OT problema con git.

Yuri yurj a alfa.it
Gio 18 Lug 2024 10:36:09 CEST


Ciao Gabriele,

  quando dici "al momento del push però, da remoto viene rifiutata la 
sincronizazzione" a quale comando ti riferisci? git push --force? 
Considera anche che se è un repository condiviso, può essere 
problematico per gli altri.

Il 17/07/24 07:53, Giovanni Porcari ha scritto:
>
>> Il giorno 16 lug 2024, alle ore 15:22, Gabriele Battaglia <iz4apu a libero.it> ha scritto:
>>
>> Ciao.
>>
>> Perdonate l'OT. Ci sbatto la testa da questa mattina...
>>
>>
>> Devo eliminare una serie di file abbastanza grossi, da un progetto che ho su git.
>>
>> Se li elimino fisicamente in locale, ovviamente non risolvo il problema perchè il bravo git li impacchetta e li lascia nella cronologia in previsione di un revert.
>>
>> Eliminarli dalla cronologia definitivamente però, è un macello senza precedenti, almeno per me che sono piuttosto nuovo al mondo git.
>>
>> Ho provato con filter-branch, con una utility che si chiama filter-repo e in qualche altro modo che mi ha suggerito ChatGPT4o.
>>
>> Ma niente da fare: in locale la cronologia riesco a pulirla e a ricostruire nodi e rami eventualmente modificati dalla cancellazione; al momento del push però, da remoto viene rifiutata la sincronizazzione e il server mi chiede un pull o un fetch i quali però, riscaricano in locale i file che non voglio più.
>>
>> Io non riesco ad uscirne.
>>
>> Mi piacerebbe una soluzione che non preveda strumenti esterni a git ma se serve va bene lo stesso.
>>
>> Voi come fareste?
>>
>>
> Ciao Gabriele
> Non sono affatto un esperto di git ma ho incollato in chat gpt la tua mail.
>
> Non ho idea se stia suggerendo una fesseria ma ti incollo la risposta.
> Non ho la minima idea se sia davvero una soluzione 😂
>
> Ecco cosa ti risponde :
>
>
> Ciao!
>
> Capisco il problema, eliminare file dalla cronologia di un repository Git può essere complicato, specialmente quando si tratta di sincronizzare le modifiche con il repository remoto. Ecco una procedura dettagliata che potrebbe aiutarti a risolvere il problema:
>
> ### Passaggi per eliminare definitivamente file dalla cronologia di Git:
>
> 1. **Installa `git-filter-repo`**:
>     Se non l'hai già fatto, installa `git-filter-repo`, che è un'alternativa più moderna a `git-filter-branch`.
>     ```bash
>     pip install git-filter-repo
>     ```
>
> 2. **Utilizza `git-filter-repo` per rimuovere i file**:
>     Esegui il comando seguente per rimuovere i file specifici dalla cronologia. Sostituisci `path/to/file` con il percorso dei file che vuoi eliminare.
>     ```bash
>     git filter-repo --path path/to/file --invert-paths
>     ```
>
> 3. **Forza il push delle modifiche al repository remoto**:
>     Dopo aver pulito la cronologia, dovrai forzare il push delle modifiche al repository remoto. Questo sovrascriverà la cronologia remota con quella locale.
>     ```bash
>     git push origin --force --all
>     git push origin --force --tags
>     ```
>
> 4. **Informa il tuo team**:
>     Poiché la cronologia del repository è stata riscritta, tutti i membri del team dovranno sincronizzare il loro repository locale con il nuovo stato remoto. Informa tutti di eseguire un pull con rebase o di clonare nuovamente il repository per evitare problemi.
>
> ### Passaggi dettagliati:
>
> 1. **Clone del repository (se necessario)**:
>     Se non hai un clone fresco del repository, esegui un clone del repository remoto:
>     ```bash
>     git clone https://path/to/your/repo.git
>     cd repo
>     ```
>
> 2. **Rimuovere i file**:
>     Utilizza `git-filter-repo` per rimuovere i file indesiderati dalla cronologia:
>     ```bash
>     git filter-repo --path path/to/file --invert-paths
>     ```
>
> 3. **Controlla la cronologia**:
>     Assicurati che i file siano stati rimossi dalla cronologia:
>     ```bash
>     git log --stat
>     ```
>
> 4. **Push forzato**:
>     Forza il push delle modifiche al repository remoto:
>     ```bash
>     git push origin --force --all
>     git push origin --force --tags
>     ```
>
> 5. **Comunicazione al team**:
>     Informa il tuo team di eseguire un pull con rebase o di riclonare il repository per sincronizzarsi con la nuova cronologia:
>     ```bash
>     git pull --rebase
>     ```
>     oppure
>     ```bash
>     git clone https://path/to/your/repo.git
>     ```
>
> ### Esempio di utilizzo:
> Supponiamo di voler rimuovere un file chiamato `largefile.zip`:
>
> 1. **Esegui il comando `git-filter-repo`**:
>     ```bash
>     git filter-repo --path largefile.zip --invert-paths
>     ```
>
> 2. **Forza il push delle modifiche**:
>     ```bash
>     git push origin --force --all
>     git push origin --force --tags
>     ```
>
> Seguendo questi passaggi, dovresti riuscire a eliminare i file indesiderati dalla cronologia di Git e sincronizzare correttamente il repository remoto. Se hai ulteriori domande o incontri problemi, fammelo sapere!
>
>
>> Grazie mille.
>>
>> Gabry.
>>
>> --
>> Gabriele Battaglia (IZ4APU)
>> --... ...--  -.. .  .. --.. ....- .- .--. ..-  - ..-  . .
>> Sent from my Giant Desktop PC
>>
>> _______________________________________________
>> Python mailing list
>> Python a lists.python.it
>> https://lists.python.it/mailman/listinfo/python
> _______________________________________________
> Python mailing list
> Python a lists.python.it
> https://lists.python.it/mailman/listinfo/python


Maggiori informazioni sulla lista Python