usar rastreados para ignorar example crear como comando carpetas cambios git gitignore glob

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.



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.