2011-11-06 20 views
50

Ya hay varias preguntas similares a esta, pero ninguna de las respuestas funciona para mí..gitignore ignore todos los archivos y luego permita de forma recursiva * .foo

Quiero ignorar todo en las carpetas debajo de mi repositorio salvo los que tienen * .foo

(Si alguien se pregunta cómo esto puede justificarse - En realidad estoy haciendo un repositorio git para todo mi "lógica" proyectos - software musical en el mac - pero solo quiero almacenar los archivos del proyecto real * .logic)

Voy a deletrearlo, así que estamos todos en el mismo plato. Aquí es lo que hago, empezando desde cero:

Configuración:

mkdir temp 
cd temp 
mkdir testdir 
cd testdir 
touch include.foo 
touch dontinclude.bad 
cd.. 
git init 
touch .gitignore 

pegar esto en .gitignore

# Ignore all 
/* 

# But not these files... 
!.gitignore 
!*.foo 

git status

Y la única sin seguimiento el archivo es .gitignore

si escribo 'git add.' - sin cambios, solo se ve .gitignore y mis 2 archivos se ignoran.

¿Por qué esto no funciona y cómo puede cambiar el procedimiento anterior para que funcione?

Aquí está la pregunta extremadamente similar de la que obtuve el archivo .gitignore. estoy usando git --version 1.7.7 (también tratado 1.7.3) - .gitignore to ignore all files, then recursively allows files of a certain type

+0

Espera, ¿has 'git agregar .gitignore' y' git commit -m "added gitignore" '? – Nic

Respuesta

96

Su problema es que el patrón /* al principio está emparejando todos los archivos y directorios en el nivel superior - incluyendo testdir, por lo todo lo que está dentro de testdir se ignora.

Esto es lo que quiere:

# Ignore everything 
* 
# Don't ignore directories, so we can recurse into them 
!*/ 
# Don't ignore .gitignore and *.foo files 
!.gitignore 
!*.foo 

Cuando haces un git add . con esta configuración, debe encontrar usted tiene sólo .gitignore y *.foo archivos que aparecen como los cambios que se cometan.

+0

aunque, como un aparte, en mi versión de mundo real con archivos .logic, misteriosamente no funciona. Recreé el repositorio de git, lo revisé un millón de veces, copié el .gitignore exactamente, cambio a .logic, find. -name "* .logic" devuelve montones de archivos pero este .gitignore ignora todos los archivos * .logic ... algo estúpido seguramente está pasando ... probablemente valga la pena seguir un comentario cuando finalmente lo crackeo – PandaWood

+0

@PandaWood: Asegúrate no tiene 'core.excludesfile' establecido en' ~/.gitconfig' apuntando a un archivo que tiene un patrón que excluiría sus archivos '* .logic'. – camh

+0

No lo recibí, pero me dieron una pista cuando traté de cargar estos archivos .logic a DropBox el otro día, falló. Otra sugerencia es: ¡agregue! * .txt a .gitignore, ya que tengo algunos archivos de texto, y comenzaron a aparecer en la lista de seguimiento, sin preocupaciones. Así que los "archivos" lógicos (p. Ej., Bla.logic) son en realidad "paquetes", en los que se hace clic en el Finder de Mac y se elige "Mostrar contenido del paquete", por lo que el * .logic in git no funciona ...¿Cómo puedo almacenar estos "archivos" en git? Entonces, podría ser mi próxima pregunta ;-) – PandaWood

Cuestiones relacionadas