web-dev-qa-db-fra.com

Ajouter tous les fichiers à un commit sauf un seul fichier?

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
427
user291701
git add -u
git reset -- main/dontcheckmein.txt
666
Ben Jackson

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"

vérifier ici

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.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 ...

105
Aquarius Power

Pour un fichier

git add -u
git reset -- main/dontcheckmein.txt

Pour un dossier

git add -u
git reset -- main/*
59
Rituraj ratan

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. .

19
Anthony Naddeo

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/*
17
cateyes

Essaye ça:

git checkout - main/dontcheckmein.txt

4
Abz

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

2
gsumk

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
2
Dhanuka Nuwan

Changements à engager: (utilisez "git reset HEAD ..." pour unstage)

0
colin rickels

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.

0
Chris