tool hub agregar git symlink gitignore

hub - Diciendo a git que ignore los enlaces simbólicos



ignore gitignore (6)

Dependiendo de la versión de git que use, debe seguir los enlaces simbólicos. Hay una configuración de configuración core.symlinks, que puede establecerse en falso y, por lo tanto, no dejar que git las siga como directorios (suponiendo que git> = 1.6). Parece completamente razonable tener su script de enlace simbólico también anexar esos enlaces al archivo .gitignore o simplemente agregarlos usted mismo. También podrías hacer algo como find . -type l >> .gitignore find . -type l >> .gitignore

Esta pregunta ha aparecido en formas similares here y here , pero no parecen coincidir con lo que estoy buscando.

Estoy haciendo un proyecto en StaticMatic, un generador de sitios estáticos de Ruby. Básicamente, es solo un directorio src / con plantillas Haml, Sass y CoffeeScript. StaticMatic proporciona un servidor de desarrollo para seguir compilando estos en un sitio estático, así como un comando de compilación que genera el sitio estático en compilación /.

Mi modificación a StaticMatic es permitir la adición de src / _modules / foo /, que podría contener src / _modules / foo / bar.haml. Al ejecutar el servidor o crear el sitio, se creará un enlace simbólico en src / bar.haml que apunta al archivo en foo /.

Hasta aquí todo bien. (Se manejan los conflictos, etc.)

El razonamiento detrás de directorios separados en _modules / es que podrían ser rastreados como submódulos de git y revisados ​​independientemente por otros equipos. Esencialmente, esto permite que varios equipos trabajen en diferentes páginas (en realidad, aplicaciones JS) en un sitio estático sin duplicar el diseño principal y tal.

El enganche es que git quiere pensar en estos enlaces simbólicos como archivos. Por ejemplo, el git status muestra:

# On branch master # Untracked files: # (use "git add <file>..." to include in what will be commited) # # src/_modules/bar/foo.haml # src/foo.haml

... cuando realmente solo quiero mostrar src/_modules/bar/foo.haml e ignorar src/foo.haml

Un enfoque sería hacer que mi código de generación de enlaces anexe los enlaces a .gitignore, pero jugar con .gitignore programáticamente me parece propenso al error. (Quizás esta preocupación no es razonable?)

Mi solución ideal sería algo como:

[filetype = link]

... en .gitignore. Por lo que sé, nada como esto es posible, ¿o no?


Esta parece ser una mejor idea

find . -type l | sed -e s''/^/.////g'' >> .gitignore

Find produce un prefijo "./" para todos los archivos. A menos que lo recorte, gitignore no puede actuar sobre ellos. Una vez que recortas el ". /" Al principio, funciona como un amuleto


Mi respuesta de otra pregunta es relevante:

for f in $(git status --porcelain | grep ''^??'' | sed ''s/^?? //''); do test -L "$f" && echo $f >> .gitignore; test -d "$f" && echo $f/* >> .gitignore; done


Mi solución puede parecer tonta, pero preferiría hacer esto que actualizar el archivo .gitignore cada vez que se agrega un nuevo archivo.

Simplemente dejo los enlaces con un nombre predeterminado como "enlace a xxx" y luego agrego la siguiente línea a mi archivo .gitignore:

link to *

Luego, solo te aseguras de no nombrar ningún otro archivo / carpeta con un nombre que comience por "vincular a" y que esté ordenado.


No guardo los archivos ejecutables y los enlaces simbólicos en mi repositorio ... así que quiero omitirlos también cuando hago un "estado de git".

Si, como yo, quieres ignorar enlaces simbólicos, directorios y ejecutables (como algunos de los archivos en $ NAG_HOME / libexec, puedes agregar esos archivos a .gitignore de la siguiente manera:

file * | egrep ''ELF|symbolic|directory'' | awk -F/: ''{ print $1 }'' >> .gitignore echo ".gitignore" >> .gitignore

Entonces, cuando haces un estado de git, no escupirá la lista de esos archivos si no los has agregado a tu repositorio.


Tuvimos un problema similar en el que necesitábamos ignorar un directorio simbólico o un directorio real, pero no un subdirectorio del mismo nombre o un archivo que comenzara con las mismas letras. Por ejemplo:

  • Ignorar - (enlace simbólico) ./media
  • Ignorar - (directorio) ./media
  • No ignorar - ./something/media
  • No ignorar - ./media.bak
  • No ignorar - ./media-somethingelse

Terminé usando esto en .gitignore:

media !*/media

Lo cual se ve un poco extraño, pero básicamente dice (línea 1) ignorar todo "medio" pero (línea 2) no ignorar ningún "medio" que no esté en el directorio raíz. Este método requiere una pequeña especificidad (en lo que respecta a no ignorar las cosas en los subdirectorios) pero debe ser bastante fácil de adaptar / ampliar.