Mein Problem ist, dass ich eine Reihe von WordPress-Websites in meinem Git-Repo habe, von denen ich selektiv nur den Inhalt meiner themes
-Ordner festlegen möchte, während der Rest der in WordPress gefundenen redundanten Dateien ignoriert wird.
Ich habe .gitignore-Dateien verwendet, um Dateitypen vorher zu ignorieren, aber kann es auch andersherum verwendet werden, dh alles ignorieren, aber einen bestimmten Ordnerpfad?
wurzel (Git Repo)
-/wordpress
- -/(WordPress Site 1)/wp-content/themes
- -/(WordPress Site 2)/wp-content/themes
- -/(WordPress Site 3)/wp-content/themes
Vielen Dank-
UPDATE:
Basierend auf den Antworten habe ich Folgendes getan, aber es funktioniert nicht. Irgendwelche Ideen?
# Ignore everything:
*
# Except for wordpress themes:
!*/wp-content/themes/*
Ich habe auch folgende Variationen ausprobiert:
!*/wp-content/themes*
!*wp-content/themes/*
!wp-content/themes/*
!/wordpress/*/wp-content/themes*
!wordpress/*/wp-content/themes*
Keiner dieser Dateien liest meine themes
-Ordner.
So habe ich es gemacht - Sie müssen im Wesentlichen die Pfade hinaufgehen, Sie können in keiner Richtung mehr als eine Ebene mit Platzhalterzeichen versehen:
# 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/*/*/*/*/*
Beachten Sie, wie Sie Inhalte für jede Ebene, die Sie einschließen möchten, explizit zulassen müssen. Wenn ich also tief unter Themes Unterverzeichnisse 5 habe, muss ich das immer noch buchstabieren.
So hat es nur bei mir funktioniert. Wenn jemand eine informierte Erklärung mit allen Mitteln anbieten möchte.
Diese Antworten sind auch hilfreich:
Wie-Negiert-Muster-Arbeit in Gititore
How-Do-Gititore-Ausschlussregeln-eigentlich-Arbeit
HINWEIS: Ich habe versucht, Double-Wildcard-Globs zu verwenden, aber laut this ist diese Funktionalität systemabhängig und funktionierte auf meinem Mac nicht:
Funktioniert nicht:
!**/wp-content/themes/
!**/wp-content/themes/**
Ich habe das oben ausprobiert und sie funktionierten nicht so gut. Ein viel besserer Ansatz ist wie folgt von hier: 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/
Ändern Sie die erste Zeile
*
Ändern Sie es in
/*
Wenn Sie einem Muster ein Ausrufezeichen (!
) voranstellen, negiert es alle vorherigen Muster, die es ausgeschlossen haben. Vermutlich könnten Sie also alles ignorieren und mit diesem Muster nur das zulassen, was Sie möchten.
Versuchen Sie diese Antworten:
.gitignore ignorieren alles außer ein paar Dateien
# Ignore everything * # But not these files... !.gitignore !script.pl !template.latex # etc... # ...even if they are in subdirectories !*/
Wie kann ich Git sagen, alles außer einem Unterverzeichnis zu ignorieren?
Dies ignoriert Root-Dateien und Root-Verzeichnisse und ignoriert dann das Root-Bin-Verzeichnis:
/* /*/ !/bin/
Auf diese Weise erhalten Sie das gesamte bin-Verzeichnis, einschließlich Unterverzeichnisse und deren Dateien.
Yarins Antwort hat für mich funktioniert, hier ist meine Version (Ich brauche kein /wordpress
-Unterverzeichnis):
*
!.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
Ich musste alles außer einem Ordner mit Unterverzeichnissen ignorieren.
Für mich funktioniert das
# Ignore everything
/*
# Not these directories
!folder/
# Not these files
!.gitignore
!.env
!file.txt
spät zur Party, aber hier ist was ich für unbekannte Tiefe benutze (die akzeptierte Lösung erfordert bekannte Tiefe)
/*
!.gitignore
!wp-content/
!*/
so wird alles unter wp-content nicht ignoriert.
Angenommen, Sie haben eine Verzeichnisstruktur wie diese:
– sites
– -all
– – – -files
– – – – – -private
– – – – – – – -newspilot
– -default
– – – -files
– – – – – -private
– – – – – – – -newspilot
Wenn Sie nur Sites/all/files/private/newspilot und sites/default/files/private/newspilot zulassen möchten, versuchen Sie zunächst Folgendes:
sites/*/files/*
!sites/*/files/private/newspilot
Das ist falsch! Das Schwierige an gitignore ist, dass Sie zuerst das übergeordnete ("private") Verzeichnis einschließen müssen, bevor Sie zulassen können, dass das untergeordnete Verzeichnis ("newspilot") in Commits eingeschlossen wird.
sites/*/files/*
!sites/*/files/private
sites/*/files/private/*
!sites/*/files/private/newspilot
http://www.christianengvall.se/gitignore-exclude-folder-but-include-a-subfolder/
Wenn Sie nach einer cleaner -Lösung suchen, versuchen Sie Folgendes:.
Wie in den Kommentaren von this answer erwähnt, müssen Sie diese Methode rekursiv verwenden.
In diesem Beispiel haben Sie eine Website-Einrichtung unter ./
, in der sich Ihr .git
-Ordner und Ihre .gitignore
-Datei befinden, und eine WordPress-Installation in ./wordpress
. Um alles unter dem ./wordpress
-Verzeichnis außer dem Designverzeichnis selbst (wordpress/wp-content/themes/my-theme
) vollständig zu ignorieren, müssen Sie jedes Verzeichnis rekursiv ignorieren und zulassen, bis das gewünschte Verzeichnis zulässig ist:
wordpress/*
wordpress/wp-content/*
wordpress/wp-content/themes/*
!wordpress/wp-content
!wordpress/wp-content/themes
!wordpress/wp-content/themes/my-theme
Der Grund für das Ignorieren mit einem Platzhalter und das Zulassen (oder das Ignorieren von 'außer') des Verzeichnisses selbst ermöglicht es Git, zuerst in das Verzeichnis zu schauen, bevor alles darin ignoriert wird. Wir weisen Git dann an, alles außer dem von uns angegebenen Verzeichnis zu ignorieren. Hier ist die gleiche Syntax, aber in der Reihenfolge, wie Git sie betrachtet:
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
Hoffentlich hilft dies jemandem, die Notwendigkeit der rekursiven Methode besser zu verstehen.
Sie können dies versuchen:
!**/themes/*
Woher :
Hier ist meine Lösung, die ein Auschecken in wp-content
voraussetzt.
# Ignore everything except directories
*
!*/
# except everything in the child theme and its required plugin
!/themes/mytheme-child/**
!/plugins/my-plugin/**
# and this file
!.gitignore
und testen:
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
es ignoriert also alles, was ich nicht will und nichts, was ich behalten möchte.
Gitlab ist gemäß https://docs.gitlab.com/ee/workflow/repository_mirroring.html mit Repository-Spiegeln für geschützte Zweige konfiguriert.
Wenn Code in einen geschützten Zweig verschoben wird, wird er auf die Server staging und production im Bare-Repo von /opt/checkout/repo.git/
gespiegelt. Der folgende post-receive
Hook (in /opt/checkout/repo.git/hooks/post-receive
) checkt dann den Code in das Arbeitsverzeichnis aus.
#!/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}"
Weitere Informationen finden Sie unter https://www.digitalocean.com/community/tutorials/how-to-set-up-automatic-deployment-with-git-with-a-vps
So habe ich es gemacht:
# 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
Das hat bei mir funktioniert. Ermöglicht Ihnen, alles außer bestimmten Dateien oder Ordnern zu ignorieren
macOS sierra
Ich bleibe immer irgendwo dabei hängen, auch nachdem ich diese Frage mehrmals aufgegriffen habe. Ich habe einen detaillierten Prozess Schritt für Schritt gemacht:
Verwenden Sie zunächst einfach git add
, um den tatsächlichen Inhalt hinzuzufügen.
Es werden die relevanten Dateien angezeigt, die dem Index hinzugefügt wurden, während alle anderen noch nicht verfolgt werden. Dies hilft, .gitignore
Schritt für Schritt zu konstruieren.
$ 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/
...
Fügen Sie eine temporäre DUMMY.TXT
-Datei in Ihr Verzeichnis ein:
$ 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/
...
Unser Ziel ist es nun, die Regeln so zu konstruieren, dass dieser DUMMY.TXT
der einzige ist, der als Ungepflegt erscheint, wenn wir fertig sind.
Beginnen Sie mit dem Hinzufügen der Regeln:
.gitignore
/*
Zuerst muss man einfach alles ignorieren. Nicht abgerufene Dateien sollten alle verschwunden sein, nur indizierte Dateien sollten angezeigt werden:
$ git status
Changes to be committed:
new file: wp-content/themes/my-theme/index.php
new file: wp-content/themes/my-theme/style.css
Fügen Sie das erste Verzeichnis im Pfad wp-content
hinzu.
/*
!/wp-content
Jetzt werden die nicht gerasterten Dateien wieder angezeigt, haben jedoch nur den Inhalt von 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/
..
Ignoriere alles im ersten Verzeichnis /wp-content/*
und ignoriere !/wp-content/themes
/*
!/wp-content
/wp-content/*
!/wp-content/themes
Jetzt werden die nicht gerasterten Dateien weiter auf nur wp-content/themes
eingegrenzt.
$ 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/
..
Wiederholen Sie den Vorgang, bis diese Dummy-Datei die einzige ist, die noch als "Nicht verfolgt" angezeigt wird:
/*
!/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
Eine andere einfache Lösung:
Sie möchten alle Wordpress-Dateien ignorieren, aber nicht Ihr Thema (zum Beispiel).
.gitignore , Inhalt ist:
# 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
In diesem Beispiel können Sie wordpress if .gitignore im Verzeichnis root wordpress entfernen.
Sie können genau dasselbe mit allen Ordnern und Inhalten tun, die Sie "ausnahmsweise" aus gitignored Ordnern/Dateien heraushalten möchten
Fazit :
Achten Sie darauf, alle Verzeichnisse eines Pfades zu löschen, die Sie löschen möchten
ABER
Achten Sie darauf, den gesamten Inhalt nicht ignorierter Verzeichnisse zu ignorieren, die Sie ignorieren möchten
Ich bin im selben Boot und versuche, ein paar Wordpress-Sites unter einem Repo zu verwalten. Meine Verzeichnisstruktur sieht so aus:
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
Ich möchte nur die Elemente im app/public
-Ordner für jede Site verfolgen. Ich habe die Beispiele auf dieser Seite sowie einige der Vorschläge hier ausprobiert und am Ende versucht:
/(WordPress Site 1)/*
!(WordPress Site 1)/app
(WordPress Site 1)/app/*
!(WordPress Site 1)/app/public
was funktionierte, aber ich musste den gleichen Pfad für jede Site ignorieren, die ich zu vermeiden versuchte.
Dann habe ich einfach den Namen der Site durch *
ersetzt und das hat den Trick für mich gemacht. Also habe ich am Ende verwendet:
/*/*
!*/app
*/app/*
!*/app/public
Dadurch wurde alles im Ordner der Site effektiv ignoriert, während im app/public
-Ordner für jede Site, die ich im Stammverzeichnis erstellt habe, alles erfasst wird.
Beachten Sie, dass Dateien im Stammverzeichnis nicht ignoriert werden, nur Verzeichnisse :)
Hoffe das hilft.
Nach mehrmaligem Bedarf habe ich endlich eine Lösung gefunden [1]:
/*/
/*.*
!.git*
!/wordpress
Erklärung Zeile für Zeile:
.gitignore
selbst (und möglicherweise .gitattributes
).[1] Einschränkungen (die mir bekannt sind):
/*
würde das gesamte Schema zerstören).wordpress
), darf .
nicht im Namen enthalten (z. B. wordpress.1
würde nicht funktionieren). Wenn es über einen .
verfügt, entfernen Sie Zeile 2 und suchen Sie nach einem anderen Weg, um alle Dateien im Stammverzeichnis auszuschließen.git version 2.17.1.windows.2
getestet