Comment faire pour que Git ignore les fichiers sans les utiliser.gitignore?
en raison de contraintes externes bizarres Je ne peux pas modifier le .gitignore de mon dépôt. Y a-t-il une autre façon d'ignorer les fichiers et les répertoires que de modifier A.gitignore? Même si c'est une solution globale comme une configuration globale qui sera appliquée à tous mes dépôts.
7 réponses
N'oubliez pas, selon gitignore , qu'il y a un ordre de priorité dans les différentes "ignorer les sources de modèle" que Git considèrent:
- motifs lus à partir de la ligne de commande pour les commandes qui les soutiennent.
- les Habitudes de lecture à partir d'un .fichier gitignore dans le même répertoire que le chemin, ou dans n'importe quel répertoire parent, avec des motifs dans les fichiers de niveau supérieur (jusqu'à la racine) étant dépassé par ceux de niveau inférieur fichiers vers le répertoire contenant le fichier.
- Habitudes de lecture de
$GIT_DIR/info/exclude
. - Modèles de lire à partir du fichier spécifié par la variable de configuration
core.excludesfile
.
les deux derniers peuvent être une solution pour votre problème mais:
- ils ne sont pas répliquées pour un lointain référentiel
- ils peuvent avoir leurs habitudes dépassé par les autres sources
(Voir Aussi ce ainsi question )
les deux autres solutions impliquent la mise à jour de l'index ( git update-index
):
-
git update-index --assume-unchanged
: voir " Git: déverrouillez un fichier dans repo local uniquement et conservez-le dans le repo distant ".
Il est mentionné par Élie Lynn dans les commentaires .- vous pouvez même ignorer le contenu d'un dossier:"
git update-index --assume-unchanged
on directory ". - utiliser
--no-assume-unchange
pour inverser l'effet: voir est-il possible degit add
un fichier actuellement protégé parassume-unchanged
? ".
- vous pouvez même ignorer le contenu d'un dossier:"
cependant, lors de votre départ une autre branche ou quand vous git pull
, ce statut "ignore" pourrait être réinitialisé. D'où l'autre option:
-
git update-index --skip-worktree
; voir:
le la différence entre les deux est expliquée dans " Git-différence entre assume-unchanged
" et ' skip-worktree
' ".
Si vous pouvez modifier .git/info/exclude
vous pouvez mettre les mêmes règles. Mais ce fichier est dans votre dossier local seulement.
il y a trois façons de dire à GIT quels fichiers ignorer:
- .gitignore files
- $GIT_DIR/.git/info/exclure Les fichiers
- pointés via le
core.excludesfile
paramétrage
ces deux derniers points pourraient résoudre votre problème.
pour plus d'informations, voir gitignore(5) .
si vous voulez juste avoir quelques fichiers locaux dans le dépôt et que l'emplacement du sous-répertoire est flexible, vous pouvez mettre vos fichiers dans tracked_dir1/tracked_dir2/untracked_dir/
et ensuite ajouter un tracked_dir1/tracked_dir2/untracked_dir/.gitignore
avec des contenus comme:
*
i. e.
$ cat > tracked_dir1/tracked_dir2/untracked_dir/.gitignore
*
<Ctrl+D>
Ignore les modifications locales aux fichiers suivis:
git update-index --assume-unchanged my-file.php
ne plus ignorer les modifications locales de suivi des fichiers:
git update-index --no-assume-unchanged my-file.php
source: git help update-index
--[no-]assume-unchanged
...
This option can be also used as a coarse file-level mechanism to ignore uncommitted changes in tracked
files (akin to what .gitignore does for untracked files). Git will fail (gracefully) in case it needs to
modify this file in the index e.g. when merging in a commit; thus, in case the assumed-untracked file is
changed upstream, you will need to handle the situation manually.
vous pouvez utiliser la méthode global gitignore au lieu de modifier celle du projet https://help.github.com/articles/ignoring-files/#create-a-global-gitignore
j'ai été dans des situations similaires, donc j'ajoute ma solution préférée que je ne vois pas mentionné. Le problème avec git update-index --assume-unchanged
dans ce cas est que vous ne pouvez pas faire cela pour un fichier non suivi. Vous avez dit
Je ne peux pas modifier le .gitignore de mon dépôt.
je vais supposer que ce que vous voulez dire c'est que vous ne pouvez pas pousser les changements de .gitignore
à l'origine. Si c'est le cas, ce que vous pouvez faire est d'ajouter le sans traces de fichier local .gitignore
, puis faites git update-index --assume-unchanged .gitignore
, de sorte que votre changement .gitignore
n'est jamais poussé. Maintenant, vous ignorez le fichier (éventuellement) non suivi, et vous n'affectez pas le fichier distant .gitignore
.