Forcer l'ajout malgré le fichier .gitignore

413

Existe-t-il un moyen de forcer l' gitajout d'un fichier malgré le .gitignorefichier?

marque
la source
4
Une meilleure question pourrait être - pourquoi voudriez-vous faire cela? Si vous voulez qu'un fichier soit suivi, annulez-le (préfixez son modèle dans le .gitignorefichier avec !, par exemple !dont/ignore/this/file).
Ohad Schneider
6
@OhadSchneider Ceci est utile si vous forcez la validation des fichiers de construction dans une autre branche. Quelques projets font cela, comme StrongLoop pour des déploiements sûrs
Deminetix
5
@OhadSchneider Pour nous, c'est plus parce que la plupart des développeurs installent git avec Visual Studio 2015, qui ajoute un gitignore global au dossier utilisateur. Cela exclut les fichiers comme * .dll et * .exe. C'est génial pour nos nouveaux projets qui n'utilisent que des packages de nugets récupérés lors de la construction, mais pour un petit nombre de projets plus anciens, nous utilisons toujours des DLL référencées manuellement dans la solution. Pour ces projets, nous aimerions les inclure manuellement, au lieu de dire à chaque développeur de commenter les fichiers * .dll et * .exe dans le gitignore global.
Nullius
4
@Nullius Ne pouvez-vous pas simplement les ignorer à un niveau supérieur .gitignore(par exemple, ajouter un .gitignoredans le même dossier que la DLL, ou un au-dessus, ou quelque chose)?
Ohad Schneider

Réponses:

570

Voir man git-add:

   -f, --force
       Allow adding otherwise ignored files.

Alors lancez ça

git add --force my/ignore/file.foo
Daniel Böhmer
la source
11
Uhm qui ne fonctionne pas, sur le statut git, le fichier n'est toujours pas affiché
Mark
5
Eh bien, je l'ai testé pour m'assurer qu'il fonctionne vraiment et qu'il fonctionne. Pouvez-vous décrire votre environnement (OS, version git ...)? Voici ce que j'ai essentiellement fait: echo "/foo" >> .gitignore; echo "bar" > foo; git add foo # should throw an error; git add -p foo # works(ne peut pas coller de retours à la ligne dans les commentaires, exécutez les commandes 1 par 1
Daniel Böhmer
4
La même chose m'est arrivée, j'avais précédemment exécuté git update-index --asume-inchanged sur mes fichiers. J'ai dû l'annuler avec --no-assume-inchanged et cela a fonctionné
Jako
4
Cela ne fonctionne que pour moi en utilisant des caractères génériques, en utilisant git 1.9.5 sous Windows, même après avoir essayé --no - supposé inchangé. "git add - f <nomfichier>" ne fait rien, mais "git add -f *" fonctionne. L'utilisation de TortoiseGit fonctionne également.
mhenry1384
@ mhenry1384 La raison pour laquelle cela ne fonctionne que pour les caractères génériques sous Windows peut être due à la façon dont le séparateur de chemin est utilisé. Pour moi, la barre oblique "/" fonctionne, mais pas la barre oblique inverse "\". Le fait que cmd / PowerShell convertisse "/" en "\" pour nous facilite la tâche.
ohw
19

Malgré la solution de travail de Daniel Böhmer, Ohad Schneider a proposé une meilleure solution dans un commentaire:

Si le fichier est généralement ignoré et que vous forcez à l'ajouter, il peut être accidentellement ignoré à nouveau à l'avenir (comme lorsque le fichier est supprimé, une validation est effectuée et le fichier est recréé.

Vous devriez juste le dés-ignorer dans le fichier .gitignore comme ça: Unignore les sous-répertoires des répertoires ignorés dans Git

COMME
la source
4
C'est correct. J'utilisais l'option --force pour les petits fichiers de données, puis j'ai réorganisé un peu la structure des dossiers et encombré tous les fichiers suivis de force. CEPENDANT: .gitignoreutilisé !specific-file-name.txtsans la hiérarchie des dossiers, de cette façon, le suivi suivra le fichier autour du dépôt.
Merlin
Cela dépend du scénario, par exemple, vous voulez parfois exclure "1.txt" dans tous les dossiers, et parfois "folder1 / *. Txt"
COMME
15
Ce n'est pas une "meilleure" solution. C'est une solution à un problème différent.
aij
2

Une autre façon d'y parvenir serait de modifier temporairement le fichier gitignore, d'ajouter le fichier, puis de rétablir le gitignore. Un peu hacky je me sens

shardy
la source
10
Je suis d'accord, ce n'est pas ce que vous voulez faire.
Merlin