私の問題は、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
フォルダーを読み取りません。
ここに私がそれをした方法があります-あなたは本質的にパスを上る必要があります、あなたはどの方向でも複数のレベルをワイルドカードにすることはできません:
# 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/**
上記を試してみましたが、うまくいきませんでした。より良いアプローチは、ここから次のとおりです。 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/
最初の行を変更します
*
に変更する
/*
これらの答えを試してください:
。gitignoreがいくつかのファイルを除くすべてを無視するようにする
# Ignore everything * # But not these files... !.gitignore !script.pl !template.latex # etc... # ...even if they are in subdirectories !*/
サブディレクトリ以外をすべて無視するようにGitに指示するにはどうすればよいですか?
これにより、ルートファイルとルートディレクトリが無視され、ルートbinディレクトリが無視されなくなります。
/* /*/ !/bin/
これにより、サブディレクトリとそのファイルを含むすべてのbinディレクトリを取得できます。
パターンの前に感嘆符(!
)を付けると、それを除外した以前のパターンを無効にします。したがって、おそらくすべてを無視し、このパターンを使用して必要なものだけを許可することができます。
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
次のようなディレクトリ構造があるとします。
– sites
– -all
– – – -files
– – – – – -private
– – – – – – – -newspilot
– -default
– – – -files
– – – – – -private
– – – – – – – -newspilot
sites/all/files/private/newspilotとsites/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/
サブディレクトリを持つ1つのフォルダではなく、すべてを無視する必要がありました。
私にとって、これは動作します
# Ignore everything
/*
# Not these directories
!folder/
# Not these files
!.gitignore
!.env
!file.txt
パーティーに遅れましたが、ここに私が未知の深さのために使用するものがあります(受け入れられたソリューションには既知の深さが必要です)
/*
!.gitignore
!wp-content/
!*/
このようにして、wp-contentの下のすべてが無視されません。
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
うまくいけば、これは誰かが再帰的メソッドの必要性をよりよく理解するのに役立つでしょう。
これを試すことができます:
!**/themes/*
場所:
これを複数回必要とした後、私は最終的に解決策を見つけました[1]:
/*/
/*.*
!.git*
!/wordpress
行ごとの説明:
.gitignore
自体(および潜在的に.gitattributes
)を許可します。[1] 制限(私が知っていること):
/*
を追加するとスキーム全体が破壊されます)。wordpress
)の名前に.
を含めることはできません(たとえば、wordpress.1
は機能しません)。 .
がある場合、2行目を削除し、ルートにあるすべてのファイルを除外する別の方法を見つけます。git version 2.17.1.windows.2
を使用してWindowsでのみテスト済み何度もこの質問に戻った後でも、私はいつもどこかにこだわっています。私はそれを段階的に行う詳細なプロセスを考え出しました:
最初に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
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 を参照してください
以下がその方法です。
# 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シエラ
別の簡単な解決策:
テーマなどではなく、すべての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。gitignoreがroot wordpress directoryにある場合は削除できます
「例外的に」gitignoredフォルダー/ファイルを避けたいすべてのフォルダーとコンテンツでまったく同じことができます。
結論:
無視しないパスのすべてのディレクトリを無視しないようにしてください
しかし
無視したい無視されないディレクトリのすべてのコンテンツを必ず無視してください
私は同じボートに乗って、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
フォルダー内のすべてをキャプチャしながら、サイトのフォルダー内のすべてを事実上無視しました。
ルートのファイルは無視されず、ディレクトリだけが無視されることに注意してください:)
お役に立てれば。