Mi problema es que tengo un montón de sitios web de WordPress en mi repositorio de git, de los cuales quiero confirmar selectivamente solo el contenido de mis themes
carpetas, mientras ignoro el resto de los archivos redundantes encontrados en WordPress.
He usado archivos .gitignore para ignorar los tipos de archivos antes, pero ¿se puede usar al revés, es decir, ignorar todo, PERO una determinada ruta de carpeta?
root (git repo)
- / wordpress
- - / (WordPress Site 1) / wp-content / themes
- - / (WordPress Site 2) / wp-content / themes
- - / (WordPress Site 3) / wp-content / themes
Gracias-
ACTUALIZAR:
Según las respuestas, hice lo siguiente, pero no funciona. ¿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 themes
carpetas.
**
comodín solo funciona si no tiene barras en su patrón, consulte sparethought.wordpress.com/2011/07/19/…!/wordpress/*/wp-content/themes/**/*
Intenté lo anterior y no funcionaron tan bien. Un mejor enfoque es el siguiente desde aquí: https://gist.github.com/444295
fuente
modificar la primera línea
cámbielo a
fuente
Prueba estas respuestas:
fuente
!*/wp-content/themes/
y!*/wp-content/themes/*
. ¿Has probado esa variación? Además, como alternativa, puede usar!*/wp-content/themes/
y en cada directorio de temas tener su propio archivo .gitignore con!*
!*/wp-content/themes*
Si antepone un patrón con un signo de exclamación (
!
), se niega cualquier patrón anterior que lo excluya. Entonces, presumiblemente, podrías ignorar todo, luego solo permitir lo que quieras usando este patrón.fuente
!wordpress/[write out directories]/wp-content/themes/
. Observe la barra oblicua de cierre y ningún asterisco de cierre. También tenga en cuenta que*
solo coincidirá con un nivel, no con varios directorios. Aquí está la página del manualNecesitaba ignorar todo menos una carpeta con subdirectorios.
Para mi esto funciona
fuente
Digamos que tiene una estructura de directorio como esta:
Cuando solo desea permitir sitios / todos / archivos / privado / newspilot y sitios / predeterminado / archivos / privado / newspilot , al principio, puede intentar esto:
¡Esto está mal! Lo complicado con gitignore es que primero debe permitir que se incluya el directorio padre ("privado") , antes de permitir que su directorio hijo ("newspilot") se incluya en las confirmaciones.
http://www.christianengvall.se/gitignore-exclude-folder-but-include-a-subfolder/
fuente
La respuesta de Yarin funcionó para mí, aquí está mi versión (no necesito el
/wordpress
subdirectorio):fuente
Siempre me quedo estancado en alguna parte de esto, incluso después de volver a esta pregunta varias veces. Se me ocurrió un proceso detallado de hacerlo paso a paso:
Primero solo use
git add
para agregar el contenido real.Mostrará los archivos relevantes agregados al índice mientras todos los demás aún no están rastreados. Esto ayuda a construir
.gitignore
paso a paso.Agregue un
DUMMY.TXT
archivo temporal en su directorio:Nuestro objetivo ahora es construir las reglas de modo que este
DUMMY.TXT
sea el único que todavía aparezca como Sin seguimiento cuando hayamos terminado.Comience a agregar las reglas:
.gitignore
El primero es ignorar todo. Los archivos no rastreados deberían desaparecer, solo deberían mostrarse los archivos indexados:
Agregue el primer directorio en la ruta
wp-content
Ahora los archivos no rastreados volverán a aparecer, pero solo tienen
wp-content
el contenidoIgnorar todo en el primer directorio
/wp-content/*
y ignorar!/wp-content/themes
Ahora los archivos no rastreados se reducirán aún más a solo
wp-content/themes
Repita el proceso hasta que ese archivo ficticio sea el único que todavía se muestra como Sin seguimiento:
fuente
Para aquellos que buscan una solución más limpia , intente lo siguiente.
Como se menciona en los comentarios de esta respuesta, debe usar este método de forma recursiva.
En este ejemplo, tiene una configuración de sitio web en
./
donde se encuentra su.git
carpeta y.gitignore
archivo y una configuración de instalación de WordPress./wordpress
. Para ignorar correctamente todo lo que está debajo del./wordpress
directorio, aparte del directorio del tema en sí (wordpress/wp-content/themes/my-theme
), deberá ignorar y permitir recursivamente cada directorio hasta el directorio que desea permitir:La razón para ignorar con un comodín y permitir (o ignorar 'aparte de') el directorio en sí mismo 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' del directorio que hemos especificado. Aquí está la misma sintaxis, pero en orden de cómo Git la está mirando:
Esperemos que esto ayude a alguien a comprender mejor la necesidad del método recursivo.
fuente
tarde a la fiesta, pero esto es lo que uso para una profundidad desconocida (la solución aceptada requiere profundidad conocida)
de esta manera no se ignora todo lo que se encuentra debajo de wp-content.
fuente
Después de necesitar esto varias veces, finalmente encontré una solución [1]:
Explicación línea por línea:
.gitignore
sí mismo (y potencialmente.gitattributes
).[1] Limitaciones (que yo sepa):
/*
rompería todo el esquema).wordpress
en este caso) no puede tener.
en el nombre (por ejemplowordpress.1
, no funcionaría). Si tiene un.
, elimine la línea 2 y busque otra forma de excluir todos los archivos en la raíz.git version 2.17.1.windows.2
fuente
Otra solución fácil:
Desea ignorar todos los archivos de Wordpress, pero no su tema (por ejemplo).
.gitignore , el contenido es:
En este ejemplo, puede eliminar wordpress si .gitignore está en directorio raíz de wordpress
Puede hacer exactamente lo mismo con todas las carpetas y el contenido que desea mantener "excepcionalmente" fuera de las carpetas / archivos ignorados
Conclusión
PERO
fuente
Puedes probar esto:
Donde :
fuente
Aquí está mi solución, que supone un pago en
wp-content
y pruebas:
así que ignora correctamente todo lo que no quiero y nada que quiera conservar.
Código de liberación
Gitlab está configurado con espejos de repositorio para ramas protegidas, de acuerdo con https://docs.gitlab.com/ee/workflow/repository_mirroring.html
Cuando el código se inserta en una rama protegida, se duplica en los estadificación y de producción los servidores de la
/opt/checkout/repo.git/
cesión temporal al descubierto. El siguientepost-receive
enlace (in/opt/checkout/repo.git/hooks/post-receive
) luego pasará el código al directorio de trabajo.Para obtener más información, consulte https://www.digitalocean.com/community/tutorials/how-to-set-up-automatic-deployment-with-git-with-a-vps
fuente
Así es como lo hice:
Esto es lo que funcionó para mí. Le permite ignorar todo excepto archivos o carpetas específicos
macOS sierra
fuente
Estoy en el mismo barco tratando de administrar un montón de sitios de Wordpress en un solo repositorio. La estructura de mi directorio se ve así:
Solo quiero rastrear los elementos dentro de la
app/public
carpeta para cada sitio. Probé las muestras en esta página , así como algunas de las sugerencias aquí, y terminé intentando esto:que funcionó pero tendría que ignorar la misma ruta para cada sitio que estaba tratando de evitar.
Luego simplemente reemplacé el nombre del sitio con
*
y eso fue el truco para mí. Entonces esto es lo que terminé usando:Esto efectivamente ignoró todo en la carpeta del sitio mientras capturaba todo en la
app/public
carpeta para cualquier sitio que creara en la raíz.Tenga en cuenta que no ignorará los archivos en la raíz, solo los directorios :)
Espero que esto ayude.
fuente
Este es el único archivo que se ignora en la mayoría de los casos, porque tiene wp-config-sample.php que puede compartir con otros.
fuente