Visualizzazione post con etichetta git rm. Mostra tutti i post
Visualizzazione post con etichetta git rm. Mostra tutti i post

giovedì 25 settembre 2025

Git: Gestione dello spostamento e rinomina dei file

A differenza di molti altri sistemi di controllo versione (VCS), Git non memorizza esplicitamente i metadati relativi allo spostamento o alla rinomina dei file.

Quando un file viene rinominato o spostato, Git non registra direttamente questa operazione, ma è in grado di riconoscerla in maniera implicita analizzando le differenze tra le versioni dei file al momento del commit.

Nonostante ciò, Git fornisce il comando git mv, che semplifica l’operazione di rinomina o spostamento di un file, integrando in un’unica istruzione le operazioni necessarie.


Esempio di utilizzo

git mv Readme.txt ReadmeFirst.txt

git status

L'output sarà quello visualizzato in FIG 1.

Rinomina file con git mv
FIG 1 - Rinomina file con git mv

In questo caso, Git riconosce il file come rinominato e lo segnala chiaramente nello staging area.

Il comando git mv è una scorciatoia che racchiude in un’unica istruzione tre operazioni normalmente necessarie:

  1. Rinomina a livello di filesystem
    mv Readme.txt ReadmeFirst.txt 
  2. Rimuove il vecchio file dall’indice
    git rm Readme.txt
  3. Aggiunge il nuovo file all’indice
    git add README

Il risultato finale è identico: Git rileva la rinomina al momento del commit, indipendentemente da come sia stata eseguita.


Vantaggi dell’uso di git mv

  • Maggiore semplicità: un solo comando invece di tre.
  • Maggiore chiarezza: rende esplicita l’intenzione di rinominare o spostare un file.
  • Integrazione fluida nello staging: evita errori di dimenticanza (ad esempio eseguire mv ma non aggiornare l’indice).


Best Practice

  • Utilizzare git mv per rendere più chiaro lo storico dei comandi ed evitare passaggi manuali.
  • In progetti complessi, verificare sempre con git status che la rinomina sia stata rilevata correttamente.
  • Ricordare che Git determina la rinomina per similarità di contenuto: se il file rinominato è stato pesantemente modificato, potrebbe non essere riconosciuto automaticamente come rename ma come delete + add.



martedì 23 settembre 2025

Git: Rimozione dei file

La gestione della rimozione dei file in Git non si limita a cancellarli dal file system: occorre infatti aggiornare anche l’indice (staging area) affinché il VCS tenga traccia della loro eliminazione. A questo scopo si utilizza il comando git rm, che rimuove un file sia dalla working directory sia dall’area di staging, garantendo così che il cambiamento venga registrato nel prossimo commit.

Se invece un file viene eliminato manualmente dal file system (ad esempio con rm nomefile in Linux/Mac o del nomefile in Windows), Git rileverà la cancellazione come una modifica non tracciata e la segnalerà con lo stato deleted nel comando git status. In questo scenario, per allineare il repository occorre esplicitamente eseguire:

git rm nomefile

git commit -m "Remove nomefile"

git rm
FIG 1 - git rm


Opzioni principali di git rm

  • git rm file
    Rimuove il file dalla working directory e dall’indice, pronto per essere eliminato con il commit successivo.
  • git rm -f file (force)
    Utilizzato quando il file modificato o già in staging non può essere rimosso normalmente. Serve a prevenire la perdita di dati non ancora salvati in un commit.
  • git rm -r nomecartella
    Rimuove la cartella dalla working directory e dall’indice. La cartella e i file contenuti verranno eliminati con il commit successivo.
  • git rm --cached file
    Rimuove il file solo dall’indice, mantenendolo nel file system locale. È utile quando si vogliono escludere file già tracciati (ad esempio log, binari o configurazioni locali) che dovrebbero essere ignorati in futuro tramite .gitignore.
  • Supporto a directory e pattern
    È possibile passare intere cartelle o utilizzare glob patterns:
    git rm log/\*.log     # rimuove tutti i file .log in log/  
    git rm *~            # rimuove tutti i file temporanei terminanti con ~

    Attenzione: occorre fare escaping (\*) se si vuole che il pattern venga interpretato da Git e non dalla shell.


Tabella di confronto: modalità di rimozione

Comando Effetto sul file system Effetto sull’indice (staging) Caso d’uso tipico
rm file / del file Elimina il file solo dal disco Segnalato come deleted ma non ancora tracciato Eliminazione manuale, da completare con git rm
git rm file Elimina dal disco e dall’indice File rimosso e pronto al commit Rimozione standard di file tracciati
git rm -r cartella Elimina dal disco e dall’indice Cartella rimossa e pronto al commit Rimozione standard di cartelle tracciate
git rm -f file Forza l’eliminazione anche se modificato File rimosso forzatamente Prevenire conflitti con file non ancora committati
git rm --cached file Mantiene il file nel disco Rimosso dall’indice Escludere file dal versionamento (es. log, build, config locali)
git rm pattern (es. *.log) Elimina più file secondo il pattern Tutti i file corrispondenti rimossi Pulizia massiva di file generati automaticamente

 

Best practice

  • Prima di utilizzare git rm -f, verificare se le modifiche devono essere salvate: in caso positivo, effettuare un commit preventivo.
  • Utilizzare git rm --cached in combinazione con un aggiornamento del .gitignore, per evitare di reintrodurre accidentalmente file indesiderati.
  • Per rimuovere directory intere, aggiungere l’opzione -r (git rm -r nomecartella).
  • In ambienti Windows, ricordare che del elimina il file solo dal disco: per rimuoverlo correttamente dal repository è necessario seguire con git rm.