tag remove practices example delete create best git git-commit

remove - git tags best practices



Seguimiento del archivo dentro del directorio ignorado (4)

Hace un tiempo configuré mi archivo .gitignore para que no rastreara una carpeta my_folder con:

my_folder/

Ahora quiero rastrear solo un archivo dado dentro de dicha carpeta, llamado my_file.md . Después de hacer que .gitignore vea así:

my_folder/ !my_folder/my_file.md

y comprobando:

git status

El archivo no aparece como un cambio para ser confirmado.

¿Qué estoy haciendo mal?

Añadir

Intenté cambiar mi archivo .gitignore a:

my_folder/* !my_folder/my_file.md

como se indicó, pero el archivo aún no se muestra como un cambio para confirmar después de un git status . ¿Necesito restablecer algo?

Añadir 2

Intentando agregar el archivo con git add my_folder/my_file.md devuelve:

The following paths are ignored by one of your .gitignore files: my_folder/my_file.md Use -f if you really want to add them. fatal: no files added

El comando git check-ignore -v my_folder/my_file.md da:

.gitignore:1:my_folder/* my_folder/my_file.md


Mi solución:

resources/**/*.*

Luego se agrega después de esta línea la negación:

!resources/my_needed_file.md


Para agregar a " .gitignore excluir carpeta pero incluir subcarpetas específicas ", una buena manera de depurar esos archivos .gitignore es usar git check-ignore (Git 1.8.4+):

git check-ignore -v my_folder/my_file.md

my_folder/ que todavía se ignora debido a my_folder/ rule.

Esto se debe a que no es posible volver a incluir un archivo si se excluye un directorio principal de ese archivo. ( * )
( * : a menos que se cumplan ciertas condiciones en git 2.?+, ver más abajo)

Es por eso que ignorar los archivos dentro de esa carpeta ( my_folder/* , en lugar de la carpeta en sí) le permite excluir uno.

Por supuesto, puede forzar la adición de un archivo ignorado ( git add -f my_folder/my_file.md ), pero ese no es el punto de esta respuesta.
El punto es explicar por qué agregar !my_folder/my_file.md en .gitignore no funciona con git 2.6 o menos.

Tenga en cuenta que con git 2.9.x / 2.10 (¿a mediados de 2016?), Podría ser posible volver a incluir un archivo si se excluye un directorio principal de ese archivo si no hay un carácter comodín en la ruta que se vuelve a incluir .

Nguyễn Thái Ngọc Duy ( pclouds ) está intentando agregar esta característica:

Así que aquí, con git 2.8+, esto funcionaría:

/my_folder !my_folder/my_file.md


Un archivo no aparecerá como "cambio a confirmar" si aún no se ha rastreado (IOW nunca se agregó antes). Simplemente agregue el archivo con git add , y Git solo rastreará el archivo, pero seguirá ignorando la carpeta.

git add -f ignored_folder/my_file

La -f es importante, ya que git rechazará agregar archivos de rutas ignoradas.


cuando necesito archivos de seguimiento como este, o solo estructuras de directorios, agrego algo como esto a mi archivo .gitignore

resources/**/*.*

lo que significa "ignorar todos los archivos con extensión dentro del directorio de recursos, incluidos los subdirectorios".

Luego coloco un archivo "vacío" dentro de esos directorios que quiero seguir.

Tenga en cuenta que solo los archivos sin extensión serán rastreados, y es por eso que esto funciona.

con la opción mencionada anteriormente, ahora puede agregar esto:

!resources/my_needed_file.md

y esa es otra solución que no incluye archivos forzados, pero es solo una opción si está utilizando archivos con extensiones.

Espero que esto ayude a alguien.