Mon problème est que j'ai un tas de sites Web WordPress dans mon dépôt git, dont je veux commettre sélectivement uniquement le contenu de mes dossiers themes
, tout en ignorant le reste des fichiers redondants trouvés dans WordPress.
J'ai déjà utilisé des fichiers .gitignore pour ignorer les types de fichiers, mais peut-il être utilisé dans l'autre sens, c'est-à-dire tout ignorer MAIS un certain chemin de dossier?
root (git repo)
-/wordpress
- -/(Site WordPress 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 de ceux-ci ne lit mes dossiers themes
.
Voici comment je l'ai fait - vous devez essentiellement emprunter les chemins, vous ne pouvez pas utiliser de 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 que vous devez autoriser explicitement le contenu pour chaque niveau que vous souhaitez inclure. Donc, si j’ai des sous-répertoires 5 profonds sous les thèmes, j’ai encore besoin de le préciser.
C'est seulement comment cela a fonctionné pour moi. Si quelqu'un veut offrir une explication plus éclairée par tous les moyens.
En outre, ces réponses utiles:
comment-faire-nier-patterns-work-in-gitignore
comment-faire-gitignore-exclusion-règles-en fait de travail
NOTE: J'ai essayé d'utiliser des 'globs' à double joker, mais selon this , cette fonctionnalité dépend du système et ne fonctionne pas sur mon mac
N'a pas marché:
!**/wp-content/themes/
!**/wp-content/themes/**
J'ai essayé ce qui précède et ils n'ont pas si bien fonctionné. une approche BEAUCOUP mieux est comme suit à partir de là: 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
*
changez le en
/*
Si vous préfixez un modèle avec un point d'exclamation (!
), il nie tout modèle précédent qui l'excluait. Donc, vraisemblablement, vous pouvez tout ignorer, puis n'autoriser que ce que vous voulez en utilisant ce modèle.
Essayez ces réponses:
Faire 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 annule 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
J'avais besoin d'ignorer tout mais pas un dossier avec des sous-répertoires.
Pour moi, ça marche
# Ignore everything
/*
# Not these directories
!folder/
# Not these files
!.gitignore
!.env
!file.txt
tard dans la soirée mais voici ce que j'utilise pour une profondeur inconnue (la solution acceptée requiert une profondeur connue)
/*
!.gitignore
!wp-content/
!*/
ainsi, tout ce qui est contenu dans wp-content n'est pas ignoré.
Disons que vous avez une structure de répertoire comme celle-ci:
– sites
– -all
– – – -files
– – – – – -private
– – – – – – – -newspilot
– -default
– – – -files
– – – – – -private
– – – – – – – -newspilot
Lorsque vous voulez n'autoriser que les sites/tous/fichiers/privé/newspilot et sites/paramètre/default/files/private/newspilot, vous pouvez, au début, essayer ceci:
sites/*/files/*
!sites/*/files/private/newspilot
C'est faux! La difficulté avec gitignore est que vous devez d’abord autoriser l’inclusion du répertoire parent ("privé"), avant de permettre l’inclusion de 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/
Pour ceux qui recherchent une solution cleaner, veuillez essayer ce qui suit.
Comme mentionné dans les commentaires de this answer, vous devez utiliser cette méthode de manière récursive.
Dans cet exemple, vous avez une configuration de site Web à ./
dans laquelle se trouvent votre dossier .git
et votre fichier .gitignore
, ainsi qu'une configuration d'installation de WordPress dans ./wordpress
. Pour ignorer correctement tout ce qui se trouve dans le répertoire ./wordpress
à part le répertoire du thème lui-même (wordpress/wp-content/themes/my-theme
), vous devez ignorer et autoriser de manière récursive chaque répertoire et le laisser accéder au 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
Le motif d'ignorer avec un caractère générique et d'autoriser (ou d'ignorer "en dehors de") le répertoire lui-même permet à Git de commencer par regarder à l'intérieur du répertoire avant de tout ignorer. Nous disons ensuite à Git de tout ignorer "en dehors" du répertoire que nous avons spécifié. Voici la même syntaxe, mais dans l'ordre dans lequel Git la considère:
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.
Vous pouvez essayer ceci:
!**/themes/*
Où :
Voici ma solution, qui suppose une extraction dans wp-content
# Ignore everything except directories
*
!*/
# except everything in the child theme and its required plugin
!/themes/mytheme-child/**
!/plugins/my-plugin/**
# and this file
!.gitignore
et test:
git version 2.20.1 (Apple Git-117)
$ git check-ignore -v .foo foo foo/ themes/foo themes/foo/bar themes/mytheme-child \
themes/mytheme-child/foo plugins/foo plugins/my-plugin plugins/my-plugin/foo .gitignore
.gitignore:2:* .foo
.gitignore:2:* foo
.gitignore:2:* foo/
.gitignore:2:* themes/foo
.gitignore:2:* themes/foo/bar
.gitignore:2:* themes/mytheme-child
.gitignore:6:!/themes/mytheme-child/** themes/mytheme-child/foo
.gitignore:2:* plugins/foo
.gitignore:2:* plugins/my-plugin
.gitignore:7:!/plugins/my-plugin/** plugins/my-plugin/foo
.gitignore:10:!.gitignore .gitignore
donc, il ignore correctement tout ce que je ne veux pas et rien que je veux garder.
Gitlab est configuré avec des miroirs de référentiel pour les branches protégées, conformément à https://docs.gitlab.com/ee/workflow/repository_mirroring.html
Lorsque le code est poussé vers une branche protégée, il est mis en miroir sur les serveurs staging et production dans le référentiel /opt/checkout/repo.git/
nu. Le hook post-receive
suivant (dans /opt/checkout/repo.git/hooks/post-receive
) extraira ensuite le code dans le répertoire de travail.
#!/bin/bash
BRANCH=staging
GIT_DIR=/opt/checkout/repo.git
GIT_WORK_TREE=/opt/bitnami/apps/wordpress/htdocs/wp-content
# on Push, checkout the code to the working tree
git checkout -f "${BRANCH}"
# ensure permissions are correct
Sudo chown -R bitnami:daemon "${GIT_WORK_TREE}"
Sudo chmod -R go-w "${GIT_WORK_TREE}"
Pour plus d'informations, voir https://www.digitalocean.com/community/tutorials/how-to-set-up-automatic-deployment-with-git-with-a-vps
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
Je suis toujours coincé quelque part à ce sujet, même après être revenu plusieurs fois sur cette question. J'ai mis au point un processus détaillé pour le faire étape par étape:
Commencez par utiliser git add
pour ajouter le contenu actuel.
Il montrera les fichiers pertinents ajoutés à l'index pendant que tous les autres ne sont pas encore suivis. Cela aide à construire .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/
...
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 objectif maintenant est de construire les règles de telle sorte que ce DUMMY.TXT
soit le seul à apparaître encore comme non suivi lorsque nous avons terminé.
Commencez à ajouter les règles:
.gitignore
/*
La première consiste simplement à tout ignorer. Les fichiers non suivis doivent être tous partis, seuls les fichiers indexés doivent montrer:
$ 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 réapparaîtront, mais ne contiendront que le contenu de 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/
..
Ignorer tout ce qui se trouve dans le premier répertoire /wp-content/*
et dés-ignorer !/wp-content/themes
/*
!/wp-content
/wp-content/*
!/wp-content/themes
Maintenant, les fichiers non suivis seront encore réduits à 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 le fichier factice soit le seul à afficher encore comme non suivi:
/*
!/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
Une autre solution facile:
Vous voulez ignorer tous les fichiers Wordpress, mais pas votre thème (par exemple).
.gitignore , content is:
# All wordpress + content of revert ignored directories
wordpress/*
wordpress/wp-content/*
wordpress/wp-content/themes/*
# Revert ignoring directories
!wordpress/
!wordpress/wp-content/
!wordpress/wp-content/themes/
!wordpress/wp-content/themes/my_theme
Dans cet exemple, vous pouvez supprimer wordpress if .gitignore se trouve dans le répertoire root wordpress
Vous pouvez faire exactement la même chose avec tous les dossiers et contenus que vous souhaitez "exceptionnellement" éviter en dehors des dossiers/fichiers gitignored
Conclusion :
Assurez-vous de ne pas ignorer tous les répertoires d'un chemin que vous souhaitez ignorer
MAIS
Assurez-vous d'ignorer tout le contenu des répertoires non ignorés que vous souhaitez ignorer
Je suis dans le même bateau, essayant de gérer un tas de sites Wordpress sous un même dépôt. 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 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 c’est tout pour moi. Donc voici ce que j'ai fini par utiliser:
/*/*
!*/app
*/app/*
!*/app/public
Cela a effectivement ignoré tout ce qui se trouvait dans le dossier du site lors de la capture de tout ce qui se trouvait dans le dossier app/public
de tout site créé à la racine.
Notez qu’il n’ignorera pas les fichiers de la racine, mais uniquement les répertoires :)
J'espère que cela t'aides.
Après avoir eu besoin de cela plusieurs fois, j'ai finalement trouvé une solution [1]:
/*/
/*.*
!.git*
!/wordpress
Explication ligne par ligne:
.gitignore
lui-même (et potentiellement .gitattributes
).[1] Limitations (à ma connaissance):
/*
romprait tout le schéma).wordpress
dans ce cas) ne peut pas avoir .
dans le nom (par exemple, wordpress.1
ne fonctionnerait pas). S'il possède un .
, supprimez la ligne 2 et trouvez un autre moyen d'exclure tous les fichiers à la racine.git version 2.17.1.windows.2