web-dev-qa-db-ja.com

.gitignoreを使用して特定のディレクトリ以外をすべて無視する

私の問題は、gitリポジトリにWordPressウェブサイトがたくさんあることです。そのうち、残りの見つかった冗長ファイルを無視して、themesフォルダーのコンテンツのみを選択的にコミットしますWordPressで。

以前に.gitignoreファイルを使用してファイルの種類を無視しましたが、他の方法で使用できますか?つまり、特定のフォルダーパスをすべて無視しますか?

ルート(gitリポジトリ)
-/ wordpress
--/(WordPressサイト1)/ wp-content/themes
--/(WordPressサイト2)/ wp-content/themes
--/(WordPressサイト3)/ wp-content/themes

ありがとう

更新:

答えに基づいて、私は次のことをしましたが、うまくいきません。何か案は?

# Ignore everything:
*
# Except for wordpress themes:
!*/wp-content/themes/*

また、次のバリエーションも試しました。

!*/wp-content/themes*
!*wp-content/themes/*
!wp-content/themes/*
!/wordpress/*/wp-content/themes*
!wordpress/*/wp-content/themes*

これらのいずれも私のthemesフォルダーを読み取りません。

116
Yarin

ここに私がそれをした方法があります-あなたは本質的にパスを上る必要があります、あなたはどの方向でも複数のレベルをワイルドカードにすることはできません:

# 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/*/*/*/*/*

含める各レベルのコンテンツを明示的に許可する方法に注意してください。したがって、テーマの下に5つのサブディレクトリがある場合でも、それを詳しく説明する必要があります。

これはそれが私のために働いた方法だけです。誰かがもっと情報に基づいた説明を提供したい場合はどうしても。

また、これらの答えは有用です:
how-do-negated-patterns-work-in-gitignore
how-do-gitignore-exclusion-rules-actually-work


注:ダブルワイルドカード「グロブ」を使用しようとしましたが、 this に従って、機能はシステムに依存し、そうではありませんでした私のMacで動作する:

機能しませんでした:

!**/wp-content/themes/
!**/wp-content/themes/**
111
Yarin

上記を試してみましたが、うまくいきませんでした。より良いアプローチは、ここから次のとおりです。 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/
77
dwenaus

最初の行を変更します

*

に変更する

/*
18
吴毅凡

これらの答えを試してください:

。gitignoreがいくつかのファイルを除くすべてを無視するようにする

# Ignore everything
*

# But not these files...
!.gitignore
!script.pl
!template.latex
# etc...

# ...even if they are in subdirectories
!*/

サブディレクトリ以外をすべて無視するようにGitに指示するにはどうすればよいですか?

これにより、ルートファイルとルートディレクトリが無視され、ルートbinディレクトリが無視されなくなります。

/*
/*/
!/bin/

これにより、サブディレクトリとそのファイルを含むすべてのbinディレクトリを取得できます。

9
irritate

パターンの前に感嘆符(!)を付けると、それを除外した以前のパターンを無効にします。したがって、おそらくすべてを無視し、このパターンを使用して必要なものだけを許可することができます。

9
dappawit

Yarinの答えは私のために働いた、ここに私のバージョンがあります(/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
4
cabgfx

次のようなディレクトリ構造があるとします。

– sites
– -all
– – – -files
– – – – – -private
– – – – – – – -newspilot
– -default
– – – -files
– – – – – -private
– – – – – – – -newspilot

sites/all/files/private/newspilotsites/default/files/privateのみを許可する場合/ newspilot、最初にこれを試してみてください:

sites/*/files/*
!sites/*/files/private/newspilot

これは間違っています!gitignoreの扱いにくいことは、最初に親を許可する必要があることです(「プライベート」)子ディレクトリ(「newspilot」)をコミットに含めることを許可する前に、含めるディレクトリ

sites/*/files/*
!sites/*/files/private
sites/*/files/private/*
!sites/*/files/private/newspilot

http://www.christianengvall.se/gitignore-exclude-folder-but-include-a-subfolder/

4
Peeter Kokk

サブディレクトリを持つ1つのフォルダではなく、すべてを無視する必要がありました。

私にとって、これは動作します

# Ignore everything
/*

# Not these directories
!folder/

# Not these files
!.gitignore
!.env
!file.txt
3
Matias Seguel

パーティーに遅れましたが、ここに私が未知の深さのために使用するものがあります(受け入れられたソリューションには既知の深さが必要です)

/*
!.gitignore
!wp-content/
!*/

このようにして、wp-contentの下のすべてが無視されません。

3
Jubair

cleanerソリューションをお探しの場合は、次を試してください。

this answerのコメントで述べたように、このメソッドを再帰的に使用する必要があります。

この例では、./フォルダーと.gitファイルが配置されている.gitignoreにWebサイトがセットアップされ、./wordpressにWordPressインストールセットアップがあります。 ./wordpressディレクトリの下のすべてを正しく無視するには、[から]テーマディレクトリ自体(wordpress/wp-content/themes/my-theme)を再帰的に無視し、希望するディレクトリまで各ディレクトリを許可する必要があります。許可する:

wordpress/*
wordpress/wp-content/*
wordpress/wp-content/themes/*
!wordpress/wp-content
!wordpress/wp-content/themes
!wordpress/wp-content/themes/my-theme

ワイルドカードで無視し、ディレクトリ自体を許可する(または 'から離れる'を無視する)理由は、Gitが最初にディレクトリ内を検索してから内部のすべてを無視できるようにするためです。次に、指定したディレクトリ以外のすべてを無視するようにGitに指示します。これは同じ構文ですが、Gitがどのように見ているかの順序です。

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

うまくいけば、これは誰かが再帰的メソッドの必要性をよりよく理解するのに役立つでしょう。

3
Oliver Tappin

これを試すことができます:

!**/themes/*

場所

  • :無視を無視(含める)
  • **:任意のディレクトリツリー(再帰)であるため、フォルダパスを指定する必要はありません。
  • テーマ:含めるフォルダー(何でもかまいません)
  • *:そのフォルダー内の任意のファイル、**とともにすべてのサブフォルダーを含めることができ、任意のファイル(*)の代わりに特定の* .css、*。xyにすることができます
2
Major

これを複数回必要とした後、私は最終的に解決策を見つけました[1]:

/*/
/*.*
!.git*
!/wordpress

行ごとの説明:

  1. ルートですべてディレクトリを無視します。
  2. ルートにある拡張子を持つすべてのファイルを無視します。
  3. .gitignore自体(および潜在的に.gitattributes)を許可します。
  4. 目的のディレクトリを許可すべてのサブディレクトリを使用

[1] 制限(私が知っていること):

  1. ルートに拡張子のないファイルを無視しません(/*を追加するとスキーム全体が破壊されます)。
  2. 4行目に含めるディレクトリ(この場合はwordpress)の名前に.を含めることはできません(たとえば、wordpress.1は機能しません)。 .がある場合、2行目を削除し、ルートにあるすべてのファイルを除外する別の方法を見つけます。
  3. git version 2.17.1.windows.2を使用してWindowsでのみテスト済み
2
Dimagog

何度もこの質問に戻った後でも、私はいつもどこかにこだわっています。私はそれを段階的に行う詳細なプロセスを考え出しました:

最初にgit addを使用して、実際のコンテンツを追加します。

インデックスに追加された関連ファイルが表示されますが、他のファイルはすべて追跡されません。これは、.gitignoreをステップごとに構築するのに役立ちます。

$ 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/
        ...

ディレクトリに一時DUMMY.TXTファイルを追加します。

$ 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/
        ...

ここでの目標は、このDUMMY.TXTが、完了時にUntrackedとして表示される唯一のルールになるようにルールを構築することです。

ルールの追加を開始します。

.gitignore

/*

まず、すべてを無視することです。追跡されていないファイルはすべて削除され、インデックス付きファイルのみが表示されます。

$ git status

    Changes to be committed:
        new file:   wp-content/themes/my-theme/index.php
        new file:   wp-content/themes/my-theme/style.css

パスに最初のディレクトリを追加しますwp-content

/*
!/wp-content

追跡されていないファイルが再び表示されますが、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/
        ..

最初のディレクトリ/wp-content/*のすべてを無視し、!/wp-content/themesの無視を解除します

/*
!/wp-content

/wp-content/*
!/wp-content/themes

これで、未追跡ファイルはさらに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/
        ..

そのダミーファイルが、未追跡として表示される唯一のファイルになるまで、プロセスを繰り返します。

/*
!/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
2
laggingreflex

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

およびテスト:

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

そのため、必要のないものや保持したいものはすべて正しく無視されます。

コードをリリースする

https://docs.gitlab.com/ee/workflow/repository_mirroring.html に従って、Gitlabは保護されたブランチのリポジトリミラーで構成されます

コードが保護されたブランチにプッシュされると、/opt/checkout/repo.git/stagingおよびproductionサーバーにミラーリングされます。裸のレポ。次のpost-receiveフック(/opt/checkout/repo.git/hooks/post-receive内)は、コードを作業ディレクトリにチェックアウトします。

#!/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}"

詳細については、 https://www.digitalocean.com/community/tutorials/how-to-set-up-automatic-deployment-with-git-with-a-vps を参照してください

1
Waddles

以下がその方法です。

# 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

これは私のために働いたものです。特定のファイルまたはフォルダー以外のすべてを無視できます

macOSシエラ

1

別の簡単な解決策:

テーマなどではなく、すべてのWordpressファイルを無視したい場合。

。gitignore、コンテンツは:

# 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

この例では、wordpress。gitignoreroot wordpress directoryにある場合は削除できます

「例外的に」gitignoredフォルダー/ファイルを避けたいすべてのフォルダーとコンテンツでまったく同じことができます。

結論:

無視しないパスのすべてのディレクトリを無視しないようにしてください

しかし

無視したい無視されないディレクトリのすべてのコンテンツを必ず無視してください

0
Arthur Bouchard

私は同じボートに乗って、1つのレポの下でWordpressサイトの束を管理しようとしています。私のディレクトリ構造は次のようになります。

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

各サイトのapp/publicフォルダー内のアイテムを追跡するだけです。私はこれでサンプルを試してみました page ここにいくつかの提案と同様に、これを試してしまいました:

/(WordPress Site 1)/*
!(WordPress Site 1)/app
(WordPress Site 1)/app/*
!(WordPress Site 1)/app/public

うまくいきましたが、回避しようとしていた各サイトの同じパスを無視する必要がありました。

次に、サイトの名前を*に置き換えただけで、うまくいきました。だから、これは私が最終的に使用したものです:

/*/*
!*/app
*/app/*
!*/app/public

これにより、ルートに作成したサイトのapp/publicフォルダー内のすべてをキャプチャしながら、サイトのフォルダー内のすべてを事実上無視しました。

ルートのファイルは無視されず、ディレクトリだけが無視されることに注意してください:)

お役に立てれば。

0
Henry