J'ai un tas de fichiers dans un ensemble de modifications, mais je veux ignorer spécifiquement un seul fichier modifié. Ressemble à ceci après git status
:
# modified: main/dontcheckmein.txt
# deleted: main/plzcheckmein.c
# deleted: main/plzcheckmein2.c
...
Existe-t-il un moyen de le faire, git add
mais d'ignorer le seul fichier texte que je ne veux pas toucher? Quelque chose comme:
git add -u -except main/dontcheckmein.txt
main/*
il est nécessaire de l'ajouter--
devant pour faire savoir à git qu'il s'agit d'un chemin. Les deux autres variantes fonctionnent sans inclure les deux tirets. (Testé dans l'invite de commande sur Windows 7 avec msysGit)git reset
pour ces dossiers par la suite fonctionnera toujours, mais il faudra du temps pour ajouter les gros dossiers.1) Pour commencer à ignorer les modifications apportées à un seul fichier déjà versionné
et pour défaire ça
git update-index --no-assume-unchanged "main/dontcheckmein.txt"
documents github pour ignorer les fichiers
2) Pour ignorer complètement un seul fichier spécifique empêchant sa création dans le référentiel
Tout d'abord, regardez ce post stackoverflow: Git global ignore ne fonctionne pas
Dans
.gitignore
, ajoutez le chemin d'accès relatif au fichier sans interligne./
.Donc, si votre fichier est à
MyProject/MyFolder/myfile.txt
, (où se.git
trouve également dans leMyProject
dossier), ajoutez-leMyFolder/myfile.txt
à votre.gitignore
fichier at .Vous pouvez confirmer les règles associées à ignorer via
git check-ignore "MyFolder/myfile.txt"
À propos de Global Ignorer
Ce lien en parle
~/.gitignore_global
, mais le fichier est lié à votre projet. Donc, si vous mettez le modèle ne comprennent pasMyFolder/myfile.txt
dans~/.gitignore_global
, il ne fonctionnera mais ne fera pas beaucoup de sens ...D'un autre côté, si vous configurez votre projet avec
git config core.excludesfile .gitignore
où.gitignore
est situéMyProject
, le fichier local sera prioritaire~/.gitignore_global
, ce qui peut avoir des règles très utiles ...Donc, pour l' instant, je pense qu'il est préférable de faire un script pour mélanger votre
.gitignore
avec~/.gitignore_global
à.gitignore
.Un dernier avertissement
Si le fichier que vous souhaitez ignorer est déjà dans le référentiel, cette méthode ne fonctionnera que si vous le faites:,
git rm "MyFolder/myfile.txt"
mais sauvegardez-le d'abord, car il sera également supprimé localement! Vous pouvez le recopier plus tard ...la source
git rm --cached MyFolder/myyfile.txt
pour supprimer le fichier du référentiel mais le conserver localement. Explication sur help.github.comPour un fichier
Pour un dossier
la source
git add . && git reset -- main/*
?git push origin master
votre prochain push,git push
et git saura que c'est dans la branche master. J'espère que cela aide.git
Prend désormais en chargeexclude certain paths and files
par pathspec magic:(exclude)
et sa forme courte:!
. Vous pouvez donc facilement y parvenir en utilisant la commande suivante.En fait, vous pouvez spécifier plus:
la source
:!...
clauses pour empêcher le shell de se plaindre. Ainsi, par exemple:git add --all -- ':!path/to/file1' ':!path/to/file2' ':!path/to/folder1/*'
.:!/path/to/(file1|file2)
?Bien que Ben Jackson ait raison, j'ai pensé ajouter également comment j'utilisais cette solution. Vous trouverez ci-dessous un script très simple que j'utilise (que j'appelle gitadd) pour ajouter toutes les modifications, à l'exception de quelques-unes que je garde répertoriées dans un fichier appelé
.gittrackignore
(très similaire au fonctionnement de .gitignore).Et voici à quoi
.gittrackignore
ressemble mon courant .Je travaille sur un projet Android que je compile à partir de la ligne de commande lors du déploiement. Ce projet dépend de SherlockActionBar, il doit donc être référencé dans project.properties, mais cela gâche la compilation, alors maintenant je tape
gitadd
et j'ajoute toutes les modifications à git sans avoir à désajouter project.properties à chaque fois.la source
--
jusqu'à votre commentaire. Selon les pages de manuel, son optionnel et ne change pas le résultat de la commande (au moins dans ce cas). Cette question semble soutenir cela, stackoverflow.com/questions/17800994/… . Corrigez-moi si je me trompe, mais il semble que cela signifie "traiter quoi que ce soit après--
comme des arguments, pas des options / commutateurs"--
dans quegit checkout
je vois dans cette question. Je ne savais pas non plus ce qu'était le double tiret jusqu'à cet échange. Je me demande si l'git checkout
ambiguïté entre les branches et les fichiers pourrait également affecter, sous cette forme ou sous une autre formegit reset
.Pour conserver le changement dans le fichier mais pas pour valider, je l'ai fait
git add .
git reset -- main/dontcheckmein.txt
git commit -m "commit message"
pour vérifier que le fichier est exclu, faites
git status
la source
Utilisez
git add -A
pour ajouter simultanément tous les fichiers modifiés et nouvellement ajoutés.Exemple
la source
la source
Essaye ça:
la source
Pour le cas spécifique de la question, le moyen le plus simple serait d'ajouter tous les fichiers avec l' extension .c et de laisser de côté tout le reste:
De git-scm (ou / et
man git add
):Notez que cela signifie que vous pouvez également faire quelque chose comme:
pour ajouter tous les fichiers (qui ne sont pas ignorés) qui se trouvent dans le
main
dossier. Vous pouvez même vous déchaîner avec des motifs plus élaborés:Ce qui précède ajoutera tous les fichiers qui se trouvent dans le
s(any char)c
dossier et ontService
quelque part dans leur nom de fichier.De toute évidence, vous n'êtes pas limité à un modèle par commande. Autrement dit, vous pouvez demander à git d'ajouter tous les fichiers ayant une extension .c et .h :
Ce lien pourrait vous donner d'autres idées de motifs globaux.
Je trouve cela particulièrement utile lorsque j'apporte de nombreux changements, mais je veux quand même que mes commits restent atomiques et reflètent un processus progressif plutôt qu'un mélange de changements sur lesquels je travaille à l'époque. Bien sûr, à un certain point, le coût de l'élaboration de modèles élaborés l'emporte sur le coût de l'ajout de fichiers avec des méthodes plus simples, ou même un fichier à la fois. Cependant, la plupart du temps, je peux facilement identifier les fichiers dont j'ai besoin avec un modèle simple et exclure tout le reste.
Au fait, vous devrez peut- être citer vos modèles globaux pour qu'ils fonctionnent, mais cela n'a jamais été le cas pour moi.
la source
J'utilise
git add --patch
un peu et je voulais quelque chose comme ça pour éviter d'avoir à frapper dtout le temps à travers les mêmes fichiers. J'ai concocté un couple d'alias git très hacky pour faire le travail:Dans mon cas, je voulais juste ignorer tout le temps certains fichiers minifiés, mais vous pourriez lui faire utiliser une variable d'environnement comme
$GIT_EXCLUDE_PATTERN
pour un cas d'utilisation plus général.la source
Modifications à valider: (utilisez "git reset HEAD ..." pour annuler la mise en scène)
la source
Vous pouvez essayer ceci:
git add * && git reset main/dontcheckmein.txt
la source