tipos tag sirve remove qué practices para nos existen etiquetas cuando create creamos best git mercurial dvcs bazaar ignore

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 .