Pourquoi utiliser ‘git rm’ pour supprimer un fichier au lieu de ‘rm’?

Sur SVN, supprimer quelque chose du système de fichiers directement (plutôt que d’utiliser svn) créait une charge de maux de tête. Jusqu’à présent, en utilisant git, je n’ai pas trouvé que cela posait problème, mais je remarque que git a sa propre implémentation.

Y a-t-il une différence? Est-ce que je fais quelque chose de mal?

Si vous utilisez simplement rm , vous devrez le suivre avec git add . git rm fait en une étape.

Vous pouvez également utiliser git rm --cached qui supprimera le fichier de l’index (en le mettant en git rm --cached pour la suppression lors de la prochaine validation), tout en conservant votre copie dans le système de fichiers local.

Supprimer des fichiers en utilisant rm n’est pas un problème en soi, mais si vous souhaitez ensuite valider que le fichier a été supprimé, vous devrez quand même faire une git rm , de sorte que vous pouvez le faire dès le départ.

De plus, en fonction de votre shell, en git rm après avoir supprimé le fichier, vous n’obtiendrez pas de complétion de tabulation, vous devrez donc épeler le chemin vous-même, alors que si vous avez toujours le fichier comme d’habitude.

git rm supprimera le fichier de l’index et du répertoire de travail (index uniquement si vous avez utilisé --cached ) afin que la suppression soit effectuée pour la prochaine validation.

Lors de l’utilisation de git rm, la suppression fera partie de votre prochain commit. Donc, si vous voulez pousser le changement, vous devez utiliser git rm

Cependant, si vous finissez par utiliser rm au lieu de git rm. Vous pouvez ignorer l’ajout de git et valider directement les modifications en utilisant:

git commit -a

Supprimez les fichiers de l’index ou de l’arborescence de travail et de l’index. git rm ne supprimera pas un fichier uniquement de votre répertoire de travail.

Voici comment vous pouvez supprimer un fichier en utilisant rm -f , puis le supprimer de votre index avec git rm

 $ rm -f index.html $ git status -s D index.html $ git rm index.html rm 'index.html' $ git status -s D index.html 

Cependant, vous pouvez tout faire en une seule fois avec juste git rm

 $ git status -s $ git rm index.html rm 'index.html' $ ls lib vendor $ git status -s D index.html