J'ai le dossier application/
que j'ajoute au .gitignore
. À l'intérieur du application/
dossier se trouve le dossier application/language/gr
. Comment puis-je inclure ce dossier?
J'ai essayé
application/
!application/language/gr/
sans chance ...
.gitignore
documentation sur le «format de modèle» soit devenue plus claire (décembre 2013). Voir ma réponse ciRéponses:
Si vous excluez
application/
, tout ce qui se trouve en dessous sera toujours exclu (même si un modèle d'exclusion négatif ultérieur («non ignoré») pourrait correspondre à quelque chose en dessousapplication/
).Pour faire ce que vous voulez, vous devez «désignorer» chaque répertoire parent de tout ce que vous voulez «désignorer». Habituellement, vous finissez par écrire des règles pour cette situation par paires: ignorez tout dans un répertoire, mais pas certains sous-répertoires.
Remarque
Le suivi
/*
est significatif:dir/
exclut un répertoire nommédir
et (implicitement) tout ce qu'il contient.Avec
dir/
, Git ne regardera jamais rien en dessousdir
, et n'appliquera donc aucun des motifs de «non-exclusion» à quoi que ce soit sousdir
.dir/*
ne dit rien surdir
lui-même; il exclut juste tout sousdir
. Avecdir/*
, Git traitera le contenu direct dedir
, donnant à d'autres modèles une chance de «dé-exclure» une partie du contenu (!dir/sub/
).la source
/*
est significatif. Si un répertoire est exclu, Git ne regardera jamais le contenu de ce répertoire. Le modèledir/
exclut un répertoire nommédir
et (implicitement) tout ce qu'il contient. Le motifdir/*
ne dit rien surdir
lui-même; il exclut juste tout sousdir
. Avecdir/
, Git ne regardera jamais rien en dessousdir
, et n'appliquera donc aucun des motifs de «non-exclusion» à quoi que ce soit sousdir
. Avecdir/*
, Git traitera le contenu direct dedir
, donnant à d'autres modèles une chance de «dé-exclure» une partie du contenu (!dir/sub/
).git add -f .
git status
, qui vous indiquera simplement que le répertoire de niveau supérieur va être ajouté. Au lieu de cela, faites ungit add
des répertoires de niveau supérieur, puisgit status
répertoriez (espérons-le) le sous-ensemble de fichiers qui ont été mis en correspondance par le modèle.Commit 59856de de Karsten Blees (kblees) pour Git 1.9 / 2.0 (Q1 2014) clarifie ce cas:
gitignore.txt
: clarifier la nature récursive des répertoires exclusDans ton cas:
Vous devez d' abord mettre les dossiers en liste blanche avant de pouvoir mettre les fichiers en liste blanche dans un dossier donné.
Mise à jour février / mars 2016:
Notez qu'avec git 2.9.x / 2.10 (mi 2016?), Il pourrait être possible de ré-inclure un fichier si un répertoire parent de ce fichier est exclu s'il n'y a pas de caractère générique dans le chemin ré-inclus .
Nguyễn Thái Ngọc Duy (
pclouds
) tente d'ajouter cette fonctionnalité:Donc, avec git 2.9+, cela aurait pu fonctionner, mais a finalement été inversé:
la source
v2.8.1.windows.1
mais cela ne semble pas fonctionner :(application/
+!application/language/gr/
mentionné dans la réponse fonctionne comme prévu.La réponse de @Chris Johnsen est excellente, mais avec les versions plus récentes de Git (1.8.2 ou ultérieur), il existe un double motif d'astérisque que vous pouvez utiliser pour une solution un peu plus abrégée:
De cette façon, vous n'avez pas à "désignorer" le répertoire parent du sous-dossier que vous souhaitez suivre.
Avec Git 2.17.0 (Je ne sais pas combien de temps avant cette version. Peut-être revenir à 1.8.2), l'utilisation du
**
modèle combiné avec excludes pour chaque sous-répertoire menant à vos fichiers fonctionne. Par exemple:la source
**
peut correspondre à zéro sous-dossier, et le*
fera correspondrelanguage
et l'exclure, empêchant l'inclusion degr
. La chaîne complète des parents que recommande @Chris Johnson semble encore nécessaire./www/**/* !/www/config.xml !/www/res
config.xml et le répertoire res sont toujours ignorés.!/www/res/
. Vous pouvez utiliser lefolder/**/*
modèle, mais vous devez toujours ajouter des exclusions pour chaque sous-répertoire que vous souhaitez ajouter. Il est toujours plus court et plus lisible que le combo ignorer / exclure.Il y a un tas de questions similaires à ce sujet, donc je posterai ce que j'ai écrit avant:
La seule façon de faire fonctionner cela sur ma machine était de le faire de cette façon:
Remarquez comment vous devez autoriser explicitement le contenu pour chaque niveau que vous souhaitez inclure. Donc, si j'ai des sous-répertoires 5 sous les thèmes, je dois encore le préciser.
Ceci est du commentaire de @ Yarin ici: https://stackoverflow.com/a/5250314/1696153
Ces sujets étaient utiles:
J'ai aussi essayé
et
**/wp-content/themes/**
ou
/wp-content/themes/**/*
Rien de tout cela n'a fonctionné pour moi non plus. Beaucoup d'essais et d'erreurs!
la source
!
règles en bas.Je n'ai trouvé que cela fonctionne réellement .
la source
La façon la plus simple et probablement la meilleure consiste à essayer d'ajouter les fichiers manuellement (généralement cela a priorité sur les
.gitignore
règles de style):Vous pouvez même vouloir l'
-N
intention d'ajouter un indicateur, pour suggérer que vous les ajouterez, mais pas immédiatement. Je le fais souvent pour de nouveaux fichiers que je ne suis pas encore prêt à mettre en scène.Il s'agit d'une copie d'une réponse publiée sur ce qui pourrait facilement être un AQ en double. Je le redistribue ici pour une visibilité accrue — je trouve plus facile de ne pas avoir un désordre de règles gitignore.
la source
Donc, puisque de nombreux programmeurs utilisent le nœud. le cas d'utilisation qui répond à cette question est d'exclure
node_modules
sauf un modulemodule-a
par exemple:la source
2.10.2.windows.1
.Ajoutez une réponse supplémentaire:
voici le résultat:
la source
Surtout pour les anciennes versions de Git, la plupart des suggestions ne fonctionneront pas aussi bien. Si c'est le cas, je mettrais un .gitignore séparé dans le répertoire où je veux que le contenu soit inclus indépendamment des autres paramètres et y autoriser ce qui est nécessaire.
Par exemple: /.gitignore
/dependency_files/.gitignore
Donc, tout dans / dependency_files (même les fichiers .dll) est très bien inclus.
la source
J'ai trouvé un cas similaire ici, où dans laravel par défaut,
.gitignore
ignore tout en utilisant astérisque, puis remplace le répertoire public.Cela ne suffit pas si vous exécutez le scénario OP.
Si vous souhaitez valider un sous-dossier spécifique de
public
, par exemple, dans votrepublic/products
répertoire, vous voulez inclure des fichiers qui sont profonds d'un sous-dossier, par exemple, pour inclure,public/products/a/b.jpg
ils ne seront pas détectés correctement, même si vous les ajoutez spécifiquement comme ceci!/public/products
,!public/products/*
, etc ..La solution consiste à vous assurer d'ajouter une entrée pour chaque niveau de chemin comme celui-ci pour les remplacer tous.
la source
Juste un autre exemple de marche dans la structure du répertoire pour obtenir exactement ce que vous voulez. Remarque: je n'ai pas exclu
Library/
maisLibrary/**/*
> git add Library
> git status
la source
Dans WordPress, cela m'a aidé:
la source
gitignore - Spécifie les fichiers intentionnellement non suivis à ignorer.
Exemple pour tout exclure sauf un répertoire spécifique foo / bar (notez le / * - sans la barre oblique, le caractère générique exclurait également tout dans foo / bar ):
Un autre exemple pour WordPress :
Plus d'informations ici: https://git-scm.com/docs/gitignore
la source
J'utilise souvent cette solution de contournement en CLI où au lieu de configurer mon
.gitignore
, je crée un.include
fichier séparé où je définis les (sous) répertoires que je veux inclure malgré les répertoires directement ou récursivement ignorés par.gitignore
.Ainsi, j'utilise également
pendant la mise en scène, avant de commettre.
Pour l'OP, je suggère d'utiliser un
.include
qui a ces lignes:REMARQUE: l'utilisation
cat
n'autorise pas l'utilisation d'alias (à l'intérieur.include
) pour spécifier $ HOME (ou tout autre répertoire spécifique). En effet, la lignehomedir/app1/*
transmise à l'git add
aide de la commande ci-dessus apparaît sous la formegit add 'homedir/app1/*'
et le fait de mettre des caractères entre guillemets simples ('') préserve la valeur littérale de chaque caractère entre guillemets, empêchant ainsi les alias (tels que homedir ) de fonctionner (voir Bash Single). Citations ).Voici un exemple de
.include
fichier que j'utilise dans mon référentiel ici .la source
Je voulais suivre les fichiers js de production jquery et cela a fonctionné:
la source
ma configuration JetBrains IntelliJ IDEA .gitignore, où j'ai besoin d'exclure le
.idea
dossier wholde sauf.idea/runConfigurations
:voir: https://github.com/daggerok/gitignore-idea-runConfigurations
la source