¿Es seguro usar el mismo file de ignorar para Git, Mercurial y Bazaar?

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

Para mejorar la synchronization de los files globales de ignorar, ¿sería seguro usar uno como un file real y simplemente unir los otros dos a ese file? En otras palabras, ¿hay algún peligro al hacer que mi $HOME/.gitignore el canónico ignore el file 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 syntax utilizada en los files de ignorar es diferente de sistema a sistema:

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

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

  • Git: list 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 file global de ignorar es bastante simple. De lo contrario, las diferencias pueden venir y morderte, como dices.

Lo probé con este file:

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

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

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

y ejecutó el command 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 file funciona bien.

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

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

a su file $HOME/.hgrc .

La syntax de al less Git y Mercurial difieren (patrones glob y regex en hg), no olviden también los sets de files en hg,! condiciones en bzr