Question Comment arrêter le suivi et ignorer les modifications apportées à un fichier dans Git?


J'ai cloné un projet qui comprend quelques .csproj des dossiers. Je n'ai pas besoin de / comme mon local csproj les fichiers sont suivis par Git (ou sont évoqués lors de la création d'un patch), mais ils sont clairement nécessaires dans le projet.

J'ai ajouté *.csproj à mon LOCAL .gitignore, mais les fichiers sont déjà dans le repo.

Quand je tape le statut git, il montre mes changements à csproj que je ne suis pas intéressé à suivre ou à soumettre pour les correctifs.

Comment puis-je supprimer le "suivi de" ces fichiers de mon repo personnel (mais les conserver dans la source afin que je puisse les utiliser) afin que je ne vois pas les changements quand je fais un statut (ou créer un patch)?

Y a-t-il une manière correcte / canonique de gérer cette situation?


1429
2018-06-01 19:08


origine


Réponses:


Je viens d'appeler git rm --cached sur chacun des fichiers que vous voulez supprimer du contrôle de révision devrait être bien. Tant que vos modèles d'ignorance locaux sont corrects, vous ne verrez pas ces fichiers inclus dans la sortie de l'état git.

Notez que cette solution supprime les fichiers du référentiel, de sorte que tous les développeurs doivent conserver leurs propres copies locales (non contrôlées par les révisions) du fichier.

Pour empêcher git de détecter les changements dans ces fichiers, vous devez également utiliser cette commande:

git update-index --assume-unchanged [path]

Ce que vous voulez probablement faire: (par le bas @Ryan Taylor réponse)

  1. C'est pour dire que vous voulez votre propre version indépendante du fichier ou du dossier. Par exemple, vous ne voulez pas écraser (ou supprimer)   production / mise en scène des fichiers de configuration.

git update-index --skip-worktree <path-name>

La réponse complète est ici dans cette URL: http://source.kohlerville.com/2009/02/untrack-files-in-git/


1795
2018-06-01 19:16



Si tu fais git update-index --assume-unchanged file.csproj, git ne vérifiera pas automatiquement les modifications apportées à file.csproj: cela les empêchera de revenir en statut git quand vous les changerez. Vous pouvez ainsi marquer tous vos fichiers .csproj de cette façon, bien que vous deviez marquer manuellement les nouveaux fichiers que le repo en amont vous envoie. (Si vous les avez dans votre .gitignore ou .git/info/exclude, alors ceux que vous créez seront ignorés)

Je ne suis pas tout à fait sûr que les fichiers .csproj sont ... si elles sont quelque chose à la manière des configurations IDE (similaire aux fichiers .clippath et .classpath d'Eclipse), alors je suggère qu'ils ne devraient jamais être contrôlés par la source à tout. D'un autre côté, s'ils font partie du système de construction (comme Makefiles), alors ils devraient clairement --- et un moyen de détecter les changements locaux optionnels (par exemple à partir d'un fichier local.csproj a la config.mk) serait utile : divise l'accumulation en parties globales et remplacements locaux.


223
2018-06-01 19:24



C'est un processus en deux étapes:

  1. Supprimez le suivi du fichier / dossier - mais gardez-les sur le disque - en utilisant

    git rm --cached 
    

    Maintenant, ils n'apparaissent pas comme "changé", mais montrent encore que

        untracked files in  git status -u  
    
  2. Ajoutez-les à .gitignore


135
2017-08-02 14:25



Il y a 3 options, vous voulez probablement # 3

1. Cela conservera le fichier local pour vous, mais le supprimera pour tout le monde quand ils tirent.

git rm --cached <file-name> ou git rm -r --cached <folder-name>

2. C'est pour l'optimisation, comme un dossier avec un grand nombre de fichiers, par ex. SDK qui ne changera probablement jamais. Il dit à git d'arrêter de vérifier ce dossier énorme chaque fois pour des changements, puisqu'il n'en aura pas.

git update-index --assume-unchanged <path-name>

3. C'est pour dire que vous voulez votre propre version indépendante du fichier ou du dossier. Par exemple, vous ne voulez pas remplacer (ou supprimer) les fichiers de configuration de production / stockage intermédiaire.

git update-index --skip-worktree <path-name>

Il est important de savoir que git update-index  ne se propage pas avec git, et chaque utilisateur devra l'exécuter indépendamment.


108
2017-10-26 21:18



La réponse acceptée n'a toujours pas fonctionné pour moi

j'ai utilisé

git rm -r --cache.

git ajouter.

git commit -m "fixation .gitignore"

Trouvé la réponse de ici 


78
2017-09-18 05:44



Vous avez oublié votre .gitignore?

Si vous avez le projet entier localement mais que vous avez oublié d'ajouter git ignore et que vous suivez maintenant certains fichiers inutiles utilisez cette commande pour tout enlever

git rm --cached -r .

assurez-vous que vous êtes à la racine du projet.

Ensuite, vous pouvez faire l'habituel

Ajouter

git add .

Commettre

git commit -m 'removed all and added with git ignore'

Pousser

git push origin master

Conclusion

J'espère que cela aidera les gens qui doivent apporter des changements à leur .gitignore ou oublié tout ensemble.

  • Il supprime tout le cache
  • Regarde ton .gitignore
  • Ajoute les fichiers que vous voulez suivre
  • Pousse à votre repo

37
2017-11-04 10:25



Pour gagner du temps, les règles que vous ajoutez à votre .gitignore peuvent être utilisées pour supprimer plusieurs fichiers / dossiers, par exemple.

git rm --cached app/**/*.xml

ou

git rm --cached -r app/widgets/yourfolder/

etc.


20
2017-11-07 13:18



Comme indiqué dans d'autres réponses, la réponse sélectionnée est fausse.

le répondre à une autre question suggère que cela peut être skip-worktree qui serait nécessaire.

git update-index --skip-worktree <file>

20
2018-05-12 11:33



Pour empêcher la surveillance d'un fichier par git

git update-index --assume-unchanged [file-path]

Et pour revenir en arrière utiliser

git update-index --no-assume-unchanged [file-path]

3
2018-04-18 09:41