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 .

104
demandé sur infused 2011-03-09 08:14:29

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/**
100
répondu Yarin 2017-05-23 11:47:30

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/
70
répondu dwenaus 2011-12-07 16:11:27

modifier la première ligne

*

changer pour

/*
10
répondu 吴毅凡 2016-03-07 05:18:30

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.

9
répondu dappawit 2011-03-09 05:22:14

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.

8
répondu irritate 2017-05-23 12:18:24

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
3
répondu cabgfx 2011-04-25 15:33:31

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.

3
répondu Oliver Tappin 2017-05-23 12:02:58

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 /

3
répondu Peeter Kokk 2016-07-19 11:34:09

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é.

3
répondu Jubair 2017-03-08 07:10:16

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
2
répondu Matias Seguel 2018-04-27 10:38:21

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
1
répondu laggingreflex 2016-08-10 13:27:17

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

1
répondu Gaurav Raghuvanshy 2017-02-28 06:32:54

Vous pouvez essayer ceci:

!**/themes/*

:

  • ! : 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
1
répondu Major 2018-09-02 12:24:20

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.

0
répondu Henry 2017-02-24 00:13:18