En raison de contraintes externes étranges, je ne peux pas modifier le .gitignore
de mon référentiel. Existe-t-il un moyen d'ignorer les fichiers et répertoires autres que la modification d'un .gitignore
? Même s'il s'agit d'une solution globale comme une configuration globale qui sera appliquée à tous mes référentiels.
N'oubliez pas, selon gitignore , qu'il existe un ordre de priorité dans les différentes "ignorer les sources de motifs" que Git considère:
$GIT_DIR/info/exclude
.core.excludesfile
.Les deux derniers peuvent être une solution à votre problème mais:
(Voir aussi ceci SO question )
Les deux autres solutions consistent à mettre à jour l'index ( git update-index
):
git update-index --assume-unchanged
: voir " Git: décompresser un fichier dans le référentiel local uniquement et le conserver dans le référentiel distant ".git update-index --assume-unchanged
sur le répertoire ".--no-assume-unchange
pour inverser l'effet: Voir " Est-il possible de git add
un fichier actuellement protégé par assume-unchanged
? ".Cependant, lorsque vous extrayez une autre succursale ou lorsque vous git pull
, cet état "ignorer" peut être réinitialisé. D'où l'autre option:
git update-index --skip-worktree
; voir: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 y mettre les mêmes règles. Mais ce fichier se trouve uniquement dans votre référentiel local.
Il existe trois façons de dire à GIT quels fichiers ignorer:
core.excludesfile
réglageLes deux derniers points pourraient résoudre votre problème.
Pour plus d'informations, consultez gitignore (5) .
Si vous souhaitez simplement avoir des fichiers locaux dans le référentiel et que l'emplacement du sous-répertoire est flexible, vous pouvez placer vos fichiers dans tracked_dir1/tracked_dir2/untracked_dir/
puis ajoutez un tracked_dir1/tracked_dir2/untracked_dir/.gitignore
avec un contenu comme:
*
C'est à dire.
$ cat > tracked_dir1/tracked_dir2/untracked_dir/.gitignore
*
<Ctrl+D>
J'ai été dans des situations similaires, donc j'ajoute ma solution préférée que je ne vois pas mentionnée. 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. Tu as dit
Je ne peux pas modifier le .gitignore de mon référentiel.
Je vais supposer que vous voulez dire que vous ne pouvez pas pousser les modifications de .gitignore
Vers Origin. Si tel est le cas, vous pouvez ajouter le fichier non suivi à votre .gitignore
Local, puis faire git update-index --assume-unchanged .gitignore
Pour que votre changement en .gitignore
Ne soit jamais poussé. Vous ignorez maintenant le fichier (éventuellement) non suivi et n'affectez pas le fichier distant .gitignore
.
Ignorer les modifications locales apportées aux fichiers suivis: git update-index --assume-unchanged my-file.php
Annuler les modifications locales des fichiers suivis: git update-index --no-assume-unchanged my-file.php
la 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.
Autrement:
.gitignore
git update-index --assume-unchanged .gitignore
Vous pouvez utiliser la méthode globale gitignore au lieu de modifier celle du projet https://help.github.com/articles/ignoring-files/#create-a-global-gitignore