rastreados - gitignore java
Usar.gitignore para ignorar todo menos directorios específicos (13)
Mi problema es que tengo un montón de sitios web de WordPress en mi repositorio git, de los cuales quiero comprometer selectivamente solo el contenido de mis carpetas de themes
, mientras ignoro el resto de los archivos redundantes encontrados en WordPress.
He usado archivos .gitignore para ignorar los tipos de archivos anteriormente, pero ¿se puede usar al revés, es decir, ignorar todo pero una determinada ruta de carpeta?
root (git repo)
- / wordpress
- - / (Sitio de WordPress 1) / wp-content / themes
- - / (Sitio de WordPress 2) / wp-content / themes
- - / (Sitio de WordPress 3) / wp-content / themes
Gracias-
ACTUALIZAR:
Basado en las respuestas, hice lo siguiente, pero no está funcionando. ¿Algunas ideas?
# Ignore everything:
*
# Except for wordpress themes:
!*/wp-content/themes/*
También probé las siguientes variaciones:
!*/wp-content/themes*
!*wp-content/themes/*
!wp-content/themes/*
!/wordpress/*/wp-content/themes*
!wordpress/*/wp-content/themes*
Ninguno de estos lee mis carpetas de themes
.
Así es como lo hice - esencialmente tienes que caminar por los caminos, no puedes ir más allá de un nivel en cualquier dirección:
# 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/*/*/*/*/*
Observe cómo debe permitir explícitamente el contenido para cada nivel que desee incluir. Entonces, si tengo subdirectorios 5 muy por debajo de los temas, aún necesito deletrear eso.
Esto es solo lo que funcionó para mí. Si alguien se preocupa por ofrecer una explicación más informada por todos los medios.
Además, estas respuestas útiles:
how-do-negated-patterns-work-in-gitignore
how-do-gitignore-exclusion-rules-actually-work
NOTA: Intenté utilizar ''comodines'' de doble comodín, pero según this la funcionalidad depende del sistema y no funcionaba en mi mac:
No funcionó:
!**/wp-content/themes/
!**/wp-content/themes/**
Así es como lo hice:
# 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
Esto es lo que funcionó para mí. Le permite ignorar todo, excepto archivos o carpetas específicos
macOS sierra
Estoy en el mismo barco tratando de administrar un montón de sitios de Wordpress en un repo. Mi estructura de directorio se ve así:
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
Quiero simplemente rastrear los elementos dentro de la app/public
carpeta app/public
para cada sitio. Probé las muestras en esta page , así como algunas de las sugerencias aquí y terminé intentando esto:
/(WordPress Site 1)/*
!(WordPress Site 1)/app
(WordPress Site 1)/app/*
!(WordPress Site 1)/app/public
que funcionó, pero tendría que ignorar el mismo camino para cada sitio que intentaba evitar.
Luego acabo de reemplazar el nombre del sitio con *
y eso me solucionó el problema. Así que esto es lo que terminé usando:
/*/*
!*/app
*/app/*
!*/app/public
Esto efectivamente ignoró todo en la carpeta del sitio al capturar todo en la app/public
carpeta app/public
para cualquier sitio que creé en la raíz.
Tenga en cuenta que no ignorará los archivos en la raíz, solo los directorios :)
Espero que esto ayude.
Intenté lo anterior y no funcionaron tan bien. MUCHO mejor enfoque es el siguiente desde aquí: 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/
La respuesta de Yarin funcionó para mí, aquí está mi versión (no necesito el subdirectorio /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
Necesitaba ignorar todo pero no una carpeta con subdirectorios.
Para mí, esto funciona
# Ignore everything
/*
# Not these directories
!folder/
# Not these files
!.gitignore
!.env
!file.txt
Para aquellos que buscan una solución más limpia , intente lo siguiente.
Como se menciona en los comentarios de this respuesta, debe usar este método recursivamente.
En este ejemplo, tiene una configuración de sitio web en ./
donde se encuentra su archivo .git
y .gitignore
archivo .gitignore
y una instalación de WordPress en ./wordpress
. Para ignorar correctamente todo lo que se encuentra debajo del directorio ./wordpress
además del directorio de temas en sí ( wordpress/wp-content/themes/my-theme
), deberá ignorar recursivamente y permitir que cada directorio suba hasta el directorio que desea permitir:
wordpress/*
wordpress/wp-content/*
wordpress/wp-content/themes/*
!wordpress/wp-content
!wordpress/wp-content/themes
!wordpress/wp-content/themes/my-theme
La razón para ignorar con un comodín y permitir (o ignorar "aparte de") el directorio en sí le permite a Git mirar primero dentro del directorio antes de ignorar todo lo que contiene. Luego le decimos a Git que ignore todo "aparte de" el directorio que hemos especificado. Aquí está la misma sintaxis, pero en orden de cómo lo está viendo 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
Con suerte, esto ayuda a alguien a entender mejor la necesidad del método recursivo.
Pruebe estas respuestas:
Haga que .gitignore ignore todo, excepto algunos archivos
# Ignore everything * # But not these files... !.gitignore !script.pl !template.latex # etc... # ...even if they are in subdirectories !*/
¿Cómo le digo a Git que ignore todo excepto un subdirectorio?
Esto ignora los archivos raíz y los directorios raíz, luego ignora el directorio raíz del bin:
/* /*/ !/bin/
De esta forma, obtiene todo el directorio bin, incluidos los subdirectorios y sus archivos.
Si prefijas un patrón con un signo de exclamación ( !
), Se anula cualquier patrón anterior que lo haya excluido. Entonces, presumiblemente, podrías ignorar todo y luego solo permitir lo que quieras usando este patrón.
Siempre me quedo atorado en alguna parte de esto incluso después de volver a esta pregunta en numerosas ocasiones. He venido con un proceso detallado de hacerlo paso a paso:
Primero simplemente use git add
para agregar el contenido real.
Mostrará los archivos relevantes agregados al índice, mientras que los demás aún no se rastrearon. Esto ayuda a construir .gitignore
paso a paso.
$ 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/
...
Agregue un archivo DUMMY.TXT
temporal en su directorio:
$ 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/
...
Nuestro objetivo ahora es construir las reglas para que este DUMMY.TXT
sea el único que siga apareciendo como No rastreado cuando hayamos terminado.
Comience a agregar las reglas:
.gitignore
/*
El primero es simplemente ignorar todo. Los archivos sin seguimiento deberían desaparecer, solo deberían mostrarse los archivos indexados:
$ git status
Changes to be committed:
new file: wp-content/themes/my-theme/index.php
new file: wp-content/themes/my-theme/style.css
Agregue el primer directorio en la ruta wp-content
/*
!/wp-content
Ahora los archivos Untracked se mostrarán nuevamente, pero solo tendrán 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/
..
Ignora todo en el primer dir /wp-content/*
y un-ignore !/wp-content/themes
/*
!/wp-content
/wp-content/*
!/wp-content/themes
Ahora los archivos sin seguimiento se reducirán aún más a solo 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/
..
Repita el proceso hasta que ese archivo ficticio sea el único que aún se muestre como Sin seguimiento:
/*
!/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
Supongamos que tiene una estructura de directorios como esta:
– sites
– -all
– – – -files
– – – – – -private
– – – – – – – -newspilot
– -default
– – – -files
– – – – – -private
– – – – – – – -newspilot
Cuando solo quiere permitir sitios / all / files / private / newspilot y sites / default / files / private / newspilot , al principio puede intentar esto:
sites/*/files/*
!sites/*/files/private/newspilot
¡Esto está mal! Lo difícil de gitignore es que primero debe permitir que se incluya el directorio principal ("privado") , antes de que pueda permitir que su directorio secundario ("newspilot") se incluya en commits.
sites/*/files/*
!sites/*/files/private
sites/*/files/private/*
!sites/*/files/private/newspilot
http://www.christianengvall.se/gitignore-exclude-folder-but-include-a-subfolder/
modificar la primera línea
*
cambiarlo a
/*
tarde a la fiesta, pero esto es lo que uso para profundidad desconocida (la solución aceptada requiere profundidad conocida)
/*
!.gitignore
!wp-content/
!*/
de esta forma, todo lo que se encuentre bajo wp-content no se ignora.