tag - ¿qué tipos de etiquetas existen en git?




¿Es seguro usar el mismo archivo de ignorar para Git, Mercurial y Bazaar? (2)

La sintaxis de al menos Git y Mercurial difieren (patrones glob y regex en hg), no olviden también los conjuntos de archivos en hg,! condiciones en bzr

Git, Mercurial y Bazaar parecen tener formatos similares para su archivo de ignorar ( .gitignore , .hgignore , .bzrignore [ver también patrones bzr] ).

Para mejorar la sincronización de los archivos globales de ignorar, ¿sería seguro usar uno como un archivo real y simplemente unir los otros dos a ese archivo? En otras palabras, ¿hay algún peligro al hacer que mi $HOME/.gitignore el canónico ignore el archivo y el hacer

ln -s $HOME/.gitignore $HOME/.hgignore
ln -s $HOME/.gitignore $HOME/.bazaar/ignore

o hay alguna diferencia sutil entre ellos que me muerda en algún momento?


La sintaxis utilizada en los archivos de ignorar es diferente de sistema a sistema:

  • Mercurial: lista de expresiones regulares: se puede cambiar con una syntax: glob line.

  • Bazar: lista de patrones glob de shell - prefijando con RE: para que coincida con la expresión regular.

  • Git: lista de patrones de glob de concha.

Además, las reglas exactas sobre cómo se combinan los patrones de shell y las expresiones regulares difieren de una herramienta a otra. Con todo, esto significa que solo puedes esperar utilizar este truco si tu archivo global de ignorar es bastante simple. De lo contrario, las diferencias pueden venir y morderte, como dices.

Lo probé con este archivo:

syntax: glob
.bzr
.git
.hg
*.o
*~

y parece funcionar según lo previsto en las tres herramientas. Para probarlo, creé este árbol de directorios:

$ tree
.
|-- foo.c
|-- foo.c.~1~
|-- foo.h
|-- foo.o
`-- src
    |-- bar.c
    |-- bar.c.~1~
    `-- bar.o

y ejecutó el comando de estado para cada herramienta:

$ for tool in hg git bzr; do echo "== $tool status =="; $tool status; done
== hg status ==
? foo.c
? foo.h
? src/bar.c
== git status ==
# On branch master
#
# Initial commit
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#       foo.c
#       foo.h
#       src/
nothing added to commit but untracked files present (use "git add" to track)
== bzr status ==
unknown:
  foo.c
  foo.h
  src/

Como puede ver, este simple archivo funciona bien.

Técnicamente, Git y Bazaar ahora ignorarán un archivo llamado syntax: glob , pero a menos que planees crear un archivo con ese nombre extraño, esto no importa. Finalmente, tenga en cuenta que Mercurial no lee un archivo $HOME/.hgignore por defecto. Pero puedes hacer que lo lea añadiendo

[ui]
ignore.my-default = ~/.hgignore

a su archivo $HOME/.hgrc .





ignore