Utiliser.gitignore pour tout ignorer sauf les répertoires spécifiques
mon problème, c'est que j'ai un tas de sites WordPress dans mon git repo, dont je veux seulement propager sélectivement le contenu de mes dossiers themes
, tout en ignorant le reste des fichiers redondants trouvés dans WordPress.
j'ai utilisé .les fichiers gitignore pour ignorer les types de fichiers avant, mais peut - il être utilisé dans l'autre sens-c'est-à-dire pour ignorer tout sauf un chemin de dossier particulier?
racine (repo git)
- /wordpress
- - /(Site WordPress 1) / wp-content / thèmes
- - /(Site WordPress 2) / wp-content / thèmes
- - /(Site WordPress 3)/wp-content/thèmes
Merci -
mise à jour:
D'après les réponses que j'ai données, mais ça ne marche pas. Des idées?
# Ignore everything:
*
# Except for wordpress themes:
!*/wp-content/themes/*
j'ai aussi essayé les variations suivantes:
!*/wp-content/themes*
!*wp-content/themes/*
!wp-content/themes/*
!/wordpress/*/wp-content/themes*
!wordpress/*/wp-content/themes*
aucun de ceux-ci ne lit mes dossiers themes
.
14 réponses
Voici comment je l'ai fait - vous avez essentiellement à marcher les chemins, vous ne pouvez pas Joker Plus d'un niveau dans n'importe quelle direction:
# Ignore everything:
*
# Except for the themes directories:
!wordpress/
!wordpress/*/
!wordpress/*/wp-content/
!wordpress/*/wp-content/themes/
!wordpress/*/wp-content/themes/*
!wordpress/*/wp-content/themes/*/*
!wordpress/*/wp-content/themes/*/*/*
!wordpress/*/wp-content/themes/*/*/*/*
!wordpress/*/wp-content/themes/*/*/*/*/*
notez comment vous devez autoriser explicitement le contenu pour chaque niveau que vous voulez inclure. Donc si j'ai des sous-répertoires 5 en profondeur sous les thèmes, j'ai encore besoin de le préciser.
C'est seulement comme ça que ça a marché pour moi. Si quelqu'un se soucie d'offrir une explication plus informée par tous les moyens.
Aussi, ces réponses utiles:
comment-faire-nié-modèles-travail-en-gitignore
comment-faire-gitignore-exclusion-règles-en fait-travail
NOTE: j'ai essayé d'utiliser le Double Joker "globs" mais selon ce que la fonctionnalité est dépendante du système et il n'a pas travailler sur mon mac:
N'a pas fonctionné:
!**/wp-content/themes/
!**/wp-content/themes/**
j'ai essayé ci-dessus et ils n'ont pas si bien fonctionné. une bien meilleure approche est comme suit d'ici: https://gist.github.com/444295
# This is a template .gitignore file for git-managed WordPress projects.
#
# Fact: you don't want WordPress core files, or your server-specific
# configuration files etc., in your project's repository. You just don't.
#
# Solution: stick this file up your repository root (which it assumes is
# also the WordPress root directory) and add exceptions for any plugins,
# themes, and other directories that should be under version control.
#
# See the comments below for more info on how to add exceptions for your
# content. Or see git's documentation for more info on .gitignore files:
# http://kernel.org/pub/software/scm/git/docs/gitignore.html
# Ignore everything in the root except the "wp-content" directory.
/*
!.gitignore
!wp-content/
# Ignore everything in the "wp-content" directory, except the "plugins"
# and "themes" directories.
wp-content/*
!wp-content/plugins/
!wp-content/themes/
# Ignore everything in the "plugins" directory, except the plugins you
# specify (see the commented-out examples for hints on how to do this.)
wp-content/plugins/*
# !wp-content/plugins/my-single-file-plugin.php
# !wp-content/plugins/my-directory-plugin/
# Ignore everything in the "themes" directory, except the themes you
# specify (see the commented-out example for a hint on how to do this.)
wp-content/themes/*
# !wp-content/themes/my-theme/
si vous préfixez un motif avec un point d'exclamation ( !
), il annule tout motif antérieur qui l'excluait. Donc, probablement, vous pouvez tout ignorer, puis n'autoriser ce que vous voulez en utilisant ce modèle.
essayez ces réponses:
marque .gitignore ignorer tout sauf quelques fichiers
# Ignore everything * # But not these files... !.gitignore !script.pl !template.latex # etc... # ...even if they are in subdirectories !*/
Comment dire à Git d'ignorer tout sauf un sous-répertoire?
cela ignore les fichiers racine et les répertoires racine, puis dés-ignore le répertoire bin racine:
/* /*/ !/bin/
de cette façon vous obtenez tout le répertoire bin, y compris les sous-répertoires et leurs fichiers.
Yarin réponse a fonctionné pour moi, voici ma version (je n'ai pas besoin de la /wordpress
sous-répertoire):
*
!.gitignore
!/wp-content/
!/wp-content/themes/
!/wp-content/themes/*
!/wp-content/themes/*/*
!/wp-content/themes/*/*/*
!/wp-content/themes/*/*/*/*
!/wp-content/themes/*/*/*/*/*
# I don't want to track this one, so it's included here, after the negated patterns.
wp-content/themes/index.php
pour ceux qui recherchent une solution nettoyant , veuillez essayer ce qui suit.
Comme mentionné dans les commentaires de ce réponse, vous devez utiliser cette méthode de façon récursive.
dans cet exemple, vous avez un site Web setup à ./
où votre .git
dossier et .gitignore
fichier est situé et une installation WordPress setup dans ./wordpress
. D'ignorer correctement le tout sous le ./wordpress
répertoire en dehors de le répertoire de thème lui-même ( wordpress/wp-content/themes/my-theme
), vous devrez ignorer récursivement et autoriser chaque répertoire jusqu'à ce que le répertoire que vous souhaitez autoriser:
wordpress/*
wordpress/wp-content/*
wordpress/wp-content/themes/*
!wordpress/wp-content
!wordpress/wp-content/themes
!wordpress/wp-content/themes/my-theme
la raison d'ignorer avec un joker et d'autoriser (ou, en ignorant "en dehors de") le répertoire lui-même permet à Git de regarder à l'intérieur du répertoire avant d'ignorer tout ce qui s'y trouve. Nous disons alors à Git d'ignorer tout "à part" le répertoire, nous avons spécifié. Voici la même syntaxe, mais dans l'ordre où Git la regarde:
wordpress/* # Ignore everything inside here
!wordpress/wp-content # Apart from this directory
wordpress/wp-content/* # Ignore everything inside here
!wordpress/wp-content/themes # Apart from this directory
wordpress/wp-content/themes/* # Ignore everything inside here
!wordpress/wp-content/themes/my-theme # Apart from this directory
Espérons que cela aide quelqu'un à mieux comprendre la nécessité de la méthode récursive.
dites que vous avez une structure de répertoire comme celle-ci:
– sites
– -all
– – – -files
– – – – – -private
– – – – – – – -newspilot
– -default
– – – -files
– – – – – -private
– – – – – – – -newspilot
quand vous voulez n'autoriser que les sites/tous / files / private / newspilot et sites/default / files/private /newspilot , vous pourriez, Au début, essayer ceci:
sites/*/files/*
!sites/*/files/private/newspilot
c'est mal! la chose délicate avec gitignore est que vous devez d'abord permettre au répertoire parent ("privé") d'être inclus , avant que vous puissiez autoriser l'inclusion de son répertoire enfant ("newspilot") dans commits.
sites/*/files/*
!sites/*/files/private
sites/*/files/private/*
!sites/*/files/private/newspilot
http://www.christianengvall.se/gitignore-exclude-folder-but-include-a-subfolder /
la fin de la partie, mais voici ce que j'utilise profondeur inconnue (la solution retenue nécessite profondeur connue)
/*
!.gitignore
!wp-content/
!*/
de cette façon, tout ce qui est sous wp-content n'est pas ignoré.
j'avais besoin d'ignorer tout sauf un dossier avec des sous-répertoires.
pour moi, ça marche
# Ignore everything
/*
# Not these directories
!folder/
# Not these files
!.gitignore
!.env
!file.txt
je suis toujours coincé quelque part sur ce même après revenir à cette question de nombreuses fois. J'ai élaboré un processus détaillé pour le faire étape par étape:
utilisez D'abord git add
pour ajouter le contenu réel.
il affichera les fichiers pertinents ajoutés à l'index alors que tous les autres n'ont pas encore été tracés. Cela aide à la construction .gitignore
étape par étape.
$ git add wp-content/themes/my-theme/*
$ git status
Changes to be committed:
new file: wp-content/themes/my-theme/index.php
new file: wp-content/themes/my-theme/style.css
Untracked files:
wp-admin/
wp-content/plugins/
wp-content/themes/twentyeleven/
wp-content/themes/twentytwelve/
...
wp-includes/
...
Ajouter un temporaire DUMMY.TXT
fichier dans votre annuaire:
$ git status
Changes to be committed:
new file: wp-content/themes/my-theme/index.php
new file: wp-content/themes/my-theme/style.css
Untracked files:
wp-admin/
wp-content/plugins/
wp-content/themes/twentyeleven/
wp-content/themes/twentytwelve/
...
wp-content/themes/my-theme/DUMMY.TXT <<<
...
wp-includes/
...
notre objectif maintenant est de construire les règles de sorte que ce DUMMY.TXT
soit le seul qui se présente toujours comme non tracked quand nous avons terminé.
commencer à ajouter les règles:
.gitignore
/*
le premier, c'est de tout ignorer. Les fichiers non tracés devraient tous disparaître, seuls les fichiers indexés devraient apparaître:
$ git status
Changes to be committed:
new file: wp-content/themes/my-theme/index.php
new file: wp-content/themes/my-theme/style.css
ajouter le premier dir dans le chemin wp-content
/*
!/wp-content
maintenant les fichiers non tracés apparaîtront à nouveau, mais n'ont que le contenu de wp-content
1519210920"
$ git status
Changes to be committed:
new file: wp-content/themes/my-theme/index.php
new file: wp-content/themes/my-theme/style.css
Untracked files:
wp-content/plugins/
wp-content/themes/twentyeleven/
wp-content/themes/twentytwelve/
..
Ignorer tout dans la première dir /wp-content/*
et de l'onu-ignorer !/wp-content/themes
/*
!/wp-content
/wp-content/*
!/wp-content/themes
maintenant, les fichiers non tracés se réduiront à seulement wp-content/themes
$ git status
Changes to be committed:
new file: wp-content/themes/my-theme/index.php
new file: wp-content/themes/my-theme/style.css
Untracked files:
wp-content/themes/twentyeleven/
wp-content/themes/twentytwelve/
..
répéter le processus jusqu'à ce que le fichier fictif est le seul à ne pas être retrouvé:
/*
!/wp-content
/wp-content/*
!/wp-content/themes
/wp-content/themes/*
!/wp-content/themes/my-theme
$ git status
Changes to be committed:
new file: wp-content/themes/my-theme/index.php
new file: wp-content/themes/my-theme/style.css
Untracked files:
wp-content/themes/my-theme/DUMMY.TXT
Voici comment je l'ai fait:
# Ignore everything at root:
/*
# Except for directories:
!wordpress/(WordPress Site 1)/wp-content/themes/
!wordpress/(WordPress Site 1)/wp-content/themes/
!wordpress/(WordPress Site 1)/wp-content/themes/
# Except files:
!README
#Except files of type:
!*.txt
C'est ce qui a fonctionné pour moi. Vous permet d'ignorer tout sauf les fichiers ou dossiers spécifiques
macOS sierra
Vous pouvez essayer ceci:
!**/themes/*
où :
- ! : négate ignore (include)
- **: n'importe quel arbre de répertoire (récursion) donc vous n'avez pas à spécifier votre chemin de dossier
- thèmes: votre dossier à inclure (peut être n'importe quoi)
- *: n'importe quel fichier dans ce dossier, vous pouvez inclure tous les sous-dossiers ainsi qu'avec ** et à la place d'inclure n'importe quel fichier ( * ), vous pouvez être spécifique *.CSS.* ,xy
je suis dans le même bateau essayant de gérer un tas de sites Wordpress sous un seul repo. Ma structure de répertoire ressemble à ceci:
root (git repo)
(WordPress Site 1)/app/public/wp-content/themes
(WordPress Site 2)/app/public/wp-content/themes
(WordPress Site 3)/app/public/wp-content/themes
je veux juste suivre les éléments à l'intérieur du dossier app/public
pour chaque site. J'ai essayé les échantillons dans cette page ainsi que certaines des suggestions ici et a fini par essayer ceci:
/(WordPress Site 1)/*
!(WordPress Site 1)/app
(WordPress Site 1)/app/*
!(WordPress Site 1)/app/public
qui a fonctionné mais je devrais ignorer le même chemin pour chaque site qui J'essayais de l'éviter.
alors j'ai juste remplacé le nom du site par *
et ça a fait l'affaire pour moi. C'est donc ce que j'ai utilisé:
/*/*
!*/app
*/app/*
!*/app/public
cela a effectivement ignoré tout dans le dossier du site tout en capturant tout dans le dossier app/public
pour tout site que je crée dans la racine.
notez qu'il n'ignorera pas les fichiers de la racine, juste les répertoires :)
Hope cela aide.