Mon problème est que j’ai un tas de sites Web WordPress dans mon repository git, dont je veux commettre de manière sélective uniquement le contenu de mes dossiers themes
, tout en ignorant le rest des fichiers redondants trouvés dans WordPress.
J’ai utilisé des fichiers .gitignore pour ignorer les types de fichiers auparavant, mais peut-il être utilisé dans l’autre sens, c’est-à-dire ignorer tout, mais un chemin de dossier spécifique?
racine (repo git)
– / wordpress
– – / (WordPress Site 1) / wp-content / themes
– – / (WordPress Site 2) / wp-content / themes
– – / (WordPress Site 3) / wp-content / themes
Merci-
METTRE À JOUR:
Sur la base des réponses, j’ai fait ce qui suit, mais cela ne fonctionne pas. Des idées?
# Ignore everything: * # Except for wordpress themes: !*/wp-content/themes/*
J’ai aussi essayé les variantes suivantes:
!*/wp-content/themes* !*wp-content/themes/* !wp-content/themes/* !/wordpress/*/wp-content/themes* !wordpress/*/wp-content/themes*
Aucun d’entre eux ne lit les dossiers de mes themes
.
Voici comment je l’ai fait – vous devez essentiellement parcourir les chemins, vous ne pouvez pas utiliser 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 explicitement autoriser le contenu pour chaque niveau que vous souhaitez inclure. Donc, si j’ai des sous-répertoires 5 sous les thèmes, je dois toujours préciser.
C’est seulement comme ça que ça a fonctionné pour moi. Si quelqu’un se soucie d’offrir une explication plus éclairée par tous les moyens.
Aussi, ces réponses utiles:
comment-faire-négation-modèles-de-travail-dans-gitignore
comment-faire-gitignore-règles d’exclusion-réellement-travail
NOTE: J’ai essayé d’utiliser des «globs» à double caractère générique, mais selon cette fonctionnalité, celle-ci dépend du système et ne fonctionne pas sur mon Mac:
N’a pas fonctionné:
!**/wp-content/themes/ !**/wp-content/themes/**
J’ai essayé ce qui précède et ils n’ont pas bien fonctionné. une approche BEAUCOUP meilleure est la suivante: 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/
modifier la première ligne
*
changer pour
/*
Si vous préfixez un motif avec un point d’exclamation ( !
), Il annule tout motif précédent qui l’a exclu. Donc, probablement, vous pourriez tout ignorer, puis ne permettre que ce que vous voulez en utilisant ce modèle.
Essayez ces réponses:
Faites en sorte que .gitignore ignore tout sauf quelques fichiers
# Ignore everything * # But not these files... !.gitignore !script.pl !template.latex # etc... # ...even if they are in subdirectories !*/
Comment puis-je dire à Git d’ignorer tout sauf un sous-répertoire?
Cela ignore les fichiers racine et les répertoires racine, puis ignore le répertoire racine bin:
/* /*/ !/bin/
De cette façon, vous obtenez tout le répertoire bin, y compris les sous-répertoires et leurs fichiers.
La réponse de Yarin a fonctionné pour moi, voici ma version (je n’ai pas besoin du sous-répertoire /wordpress
):
* !.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 plus propre , veuillez essayer ce qui suit.
Comme mentionné dans les commentaires de cette réponse, vous devez utiliser cette méthode de manière récursive.
Dans cet exemple, vous avez une configuration de site Web à ./
où se trouvent votre dossier .gitignore
et .gitignore
fichier .gitignore
et une installation d’installation de WordPress dans ./wordpress
. Pour ignorer correctement tout ce qui se trouve sous le répertoire ./wordpress
dehors du répertoire du thème lui-même ( wordpress/wp-content/themes/my-theme
), vous devrez ignorer 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 caractère générique et de permettre (ou d’ignorer ‘en dehors de’) le répertoire lui-même permet à Git de regarder d’abord dans le répertoire avant d’ignorer tout ce qu’il contient. Nous disons ensuite à Git d’ignorer tout ce qui est en dehors du répertoire que nous avons spécifié. Voici la même syntaxe, mais dans l’ordre de la façon dont 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
J’espère que cela aidera quelqu’un à mieux comprendre la nécessité de la méthode récursive.
Disons que vous avez une structure de répertoire comme celle-ci:
– sites – -all – – – -files – – – – – -private – – – – – – – -newspilot – -default – – – -files – – – – – -private – – – – – – – -newspilot
Lorsque vous souhaitez autoriser uniquement les sites / tous / fichiers / private / newspilot et sites / default / files / private / newspilot , vous pouvez au début essayer ceci:
sites/*/files/* !sites/*/files/private/newspilot
C’est faux! La difficulté de gitignore est que vous devez d’abord autoriser l’inclusion du répertoire parent (“private”) avant de pouvoir inclure son répertoire enfant (“newspilot”) dans les commits.
sites/*/files/* !sites/*/files/private sites/*/files/private/* !sites/*/files/private/newspilot
http://www.christianengvall.se/gitignore-exclude-folder-but-include-a-subfolder/
tard à la fête mais voici ce que j’utilise pour une profondeur inconnue (la solution acceptée nécessite une 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, cela fonctionne
# Ignore everything /* # Not these directories !folder/ # Not these files !.gitignore !.env !file.txt
Je suis toujours coincé quelque part, même après être revenu à cette question à plusieurs resockets. J’ai mis au point un processus détaillé pour le faire pas à pas:
Utilisez d’abord git add
pour append le contenu réel.
Il affichera les fichiers pertinents ajoutés à l’index alors que tous les autres ne seront pas suivis. Cela permet de construire .gitignore
pas à pas.
$ 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/ ...
Ajoutez un fichier temporaire DUMMY.TXT
dans votre répertoire:
$ 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 objective maintenant est de construire les règles de telle sorte que ce DUMMY.TXT
soit le seul encore à apparaître comme non suivi lorsque nous aurons terminé.
Commencez à append les règles:
.gitignore
/*
Le premier est de tout ignorer. Les fichiers non suivis doivent être tous partis, seuls les fichiers indexés doivent 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 répertoire dans le chemin wp-content
/* !/wp-content
Maintenant, les fichiers non suivis apparaîtront à nouveau, mais uniquement avec le wp-content
$ 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/ ..
Ignorez tout dans le premier répertoire /wp-content/*
et désélectionnez !/wp-content/themes
/* !/wp-content /wp-content/* !/wp-content/themes
Les fichiers non suivis se limitent désormais à 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étez le processus jusqu'à ce que ce fichier fictif soit le seul à ne pas être répertorié:
/* !/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 des fichiers ou des dossiers spécifiques
macOS sierra
Vous pouvez essayer ceci:
!**/themes/*
Où :
Je suis dans le même bateau en essayant de gérer un groupe de sites WordPress sous un seul repo. Ma structure de répertoires 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 dans le dossier app/public
pour chaque site. J’ai essayé les exemples de cette page ainsi que certaines des suggestions ici et j’ai fini par essayer ceci:
/(WordPress Site 1)/* !(WordPress Site 1)/app (WordPress Site 1)/app/* !(WordPress Site 1)/app/public
ce qui a fonctionné mais je devrais ignorer le même chemin pour chaque site que j’essayais d’éviter.
Ensuite, je viens de remplacer le nom du site par *
et cela a fait l’affaire pour moi. Donc c’est ce que j’ai fini par utiliser:
/*/* !*/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 dans la racine, juste les répertoires 🙂
J’espère que cela t’aides.