J'ai un tas de fichiers dans un changeset, mais je veux spécifiquement ignorer 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 faire git add
tout en ignorant le fichier texte que je ne souhaite pas toucher? Quelque chose comme:
git add -u -except main/dontcheckmein.txt
git add -u
git reset -- main/dontcheckmein.txt
1) Pour commencer à ignorer les modifications apportées à un seul fichier déjà versionné
git update-index --assume-unchanged "main/dontcheckmein.txt"
et pour annuler ce git update-index --no-assume-unchanged "main/dontcheckmein.txt"
2) Pour ignorer complètement un fichier spécifique l'empêchant d'être créé dans le référentiel
Premier regard sur ceci Git global ignore ne fonctionne pas
et à .gitignore
ajouter le chemin relatif au fichier sans indiquer ./
donc si votre fichier est à MyProject/MyFolder/myfile.txt
(où .git
est aussi à MyProject
), à .gitignore
vous mettez seulement ce MyFolder/myfile.txt
vous pouvez confirmer quelle règle est liée à ignorer avec git check-ignore "MyFolder/myfile.txt"
À propos de global ignore
Ce lien parle de ~/.gitignore_global
; mais le fichier est lié à votre projet; donc, si vous mettez le motif d'exclusion MyFolder/myfile.txt
à ~/.gitignore_global
, cela fonctionnera mais n'aura pas beaucoup de sens ...
D'autre part, si vous configurez votre projet avec git config core.excludesfile .gitignore
où .gitignore
est à MyProject
; cette configuration remplacera ~/.gitignore_global
qui peut avoir des règles très utiles ...
Donc, pour le moment, je pense que le mieux est de créer un script pour mélanger votre .gitignore
avec ~/.gitignore_global
à .gitignore
.
Un dernier avertissement
Si le fichier que vous voulez ignorer est déjà dans le référentiel, cette méthode ne fonctionnera que si vous procédez comme suit: git rm "MyFolder/myfile.txt"
, mais sauvegardez-le d'abord car il sera supprimé localement également! vous pouvez le copier plus tard ...
Pour un fichier
git add -u
git reset -- main/dontcheckmein.txt
Pour un dossier
git add -u
git reset -- main/*
Bien que Ben Jackson ait raison, j’ai pensé ajouter également la manière dont j’utilise cette solution. Ci-dessous, un script très simple que j’utilise (que j’appelle gitadd) pour ajouter toutes les modifications, à l’exception de quelques-uns que je garde dans un fichier appelé .gittrackignore
(très similaire au fonctionnement de .gitignore).
#!/bin/bash
set -e
git add -A
git reset `cat .gittrackignore`
Et voici à quoi ressemble mon .gittrackignore
actuel.
project.properties
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 dérange la compilation. Je viens maintenant de taper gitadd
et d’ajouter tous les changements à git sans avoir à dés-ajouter project.properties à chaque fois. .
Maintenant git
supporte exclude certain paths and files
par pathspec magic :(exclude)
et sa forme abrégée :!
. Donc, vous pouvez facilement y parvenir en utilisant la commande suivante.
git add --all -- :!main/dontcheckmein.txt
git add -- . :!main/dontcheckmein.txt
En fait, vous pouvez spécifier plus:
git add --all -- :!path/to/file1 :!path/to/file2 :!path/to/folder1/*
git add -- . :!path/to/file1 :!path/to/file2 :!path/to/folder1/*
Essaye ça:
git checkout - main/dontcheckmein.txt
Garder le changement dans le fichier mais ne pas valider, je l'ai fait
git add .
git reset -- main/dontcheckmein.txt
git commit -m "commit message"
pour vérifier le fichier est exclu faire
git status
Utilisez git add -A
pour ajouter tous les fichiers modifiés et nouvellement ajoutés à la fois.
Exemple
git add -A
git reset -- main/dontcheckmein.txt
Changements à engager: (utilisez "git reset HEAD ..." pour unstage)
J'utilise un peu git add --patch
et je voulais quelque chose comme ça pour éviter d'avoir à frapper d tout le temps à travers les mêmes fichiers. J'ai préparé un couple de pseudonymes géniaux pour faire le travail:
[alias]
HELPER-CHANGED-FILTERED = "!f() { git status --porcelain | cut -c4- | ( [[ \"$1\" ]] && egrep -v \"$1\" || cat ); }; f"
ap = "!git add --patch -- $(git HELPER-CHANGED-FILTERED 'min.(js|css)$' || echo 'THIS_FILE_PROBABLY_DOESNT_EXIST' )"
Dans mon cas, je voulais simplement ignorer certains fichiers minifiés tout le temps, mais vous pouvez lui faire utiliser une variable d'environnement telle que $GIT_EXCLUDE_PATTERN
pour un cas d'utilisation plus général.