tag - ¿Es seguro usar el mismo archivo de ignorar para Git, Mercurial y Bazaar?
¿para qué nos sirve el sha-1 cuando creamos tags? (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
.