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:
- commit 506d8f1 para git v2.7.0, revertido en commit 76b620d git v2.8.0-rc0
- commit 5e57f9c git v2.8.0-rc0, ... revertido (!) en commit 5cee3493 git 2.8.0-rc4.
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.