2011-02-13 7 views
19

El siguiente código shell crea correctamente una cadena de referencias simbólicas¿Cuál es el uso recomendado de una referencia simbólica de Git?

git symbolic-ref "first" "refs/heads/master" 
git symbolic-ref "second" "first" 
git symbolic-ref "nested/third" "second" 
git symbolic-ref "refs/heads/fourth" "nested/third" 

Y el siguiente código shell resuelve correctamente la última referencia simbólica creada para la punta del maestro.

git show-ref "refs/heads/fourth" 

Ninguno de estos casos de uso se describen en la documentación oficial (git-symbolic-ref doc, git-show-ref doc).

Sin embargo, la siguiente no funciona

git check-ref-format --print "first" 

Por lo tanto, mis preguntas son:

  • ¿Está bien para almacenar una referencia simbólica dentro del directorio refs/heads?
  • ¿Está bien encadenar referencias simbólicas?
  • Como check-ref-format falla al pasar "first", ¿significa esto que no se recomienda crear una referencia simbólica en el mismo nivel que "HEAD"? ¿O tal vez este comando no tiene la intención de tratar con enlaces simbólicos?

Mi intención es obtener una comprensión clara de lo que se admite y que no estoy trabajando en nada ni me estoy beneficiando de un error.

+0

Mientras jugaba con esto, recibí 'git-commit' para segfault cuando' HEAD' apuntaba a una etiqueta anotada. –

+1

@jleedev: Esto no es un error. Esta es una característica para evitar que los usuarios hagan cosas desagradables ... :-) – nulltoken

Respuesta

15

he finalmente posted esta pregunta a la lista de correo de desarrollo git.

Junio C Hamano, el principal mantenedor de git (+8700 confirmaciones) me proporcionó las siguientes respuestas.

Sólo hay dos tipos válidos de symrefs ahora mismo:

  • .git/cabeza, apuntando a algún lugar bajo refs/heads/jerarquía;

  • .git/refs/mandos a distancia/{nombre de alguna remota}/HEAD, que apunta a algún lugar bajo árbitros/mandos a distancia/{el mismo nombre remoto }/jerarquía.

El código se puede preparar para resolver symrefs recursivas, symrefs distinto los dos tipos anteriores, symrefs que punto en otro lugar, pero todos ellos están fuera del alcance de diseño de lo que el mecanismo fue pensado para el soporte . Lo que el código les hace (sin estrellarse) no es el diseño, sino simplemente un comportamiento indefinido.

Esto no va a cambiar mucho si decidamos reorganizar las jerarquías remotas de seguimiento en 1.8.0. El anterior no cambiará en absoluto, y el último comenzará a apuntar a refs/remotos/{la misma jerarquía remota name}/heads en su lugar.

Recuerdo vagamente tg abusado del mecanismo de symref señalar/HEAD en divertidos lugares .git; aún puede estar haciéndolo, y si ese es el caso, deberíamos ampliar la lista anterior para cubrir ese uso de .

+0

enlace a dicho hilo de la lista de correo: http://git.661346.n2.nabble.com/What-s-the-definition-of-a-valid-Git-symbolic-reference-tt6025154.html#a6026446 – Magicmaaan

3

Normalmente, symrefs vive bajo refs/ - al menos, esto es lo que hace la suite git (por ejemplo, al usar git filter-tree, obtienes refs/original/...). Algunas herramientas pueden elegir ignorar refs que no tienen el prefijo refs/.

$ git symbolic-ref refs/first refs/heads/master 
$ git check-ref-format --print refs/first 
refs/first 
+0

Entonces, ¿entienden que me estoy beneficiando de una laguna legal? ¿Tienes alguna idea sobre el encadenamiento symref? ¿Es válido o también estoy explotando un uso "no protegido contra"? – nulltoken

+0

"Normalmente" - excepto por el único símbolo que todos tienen, 'HEAD'. – Cascabel

+1

Se pueden hacer referencias externas a .git/refs/- se puede llamar a 'git log' en ellas - como FETCH_HEAD, HEAD, ORIG_HEAD, RENAMED-REF. Pero gitk no los mostrará, excepto HEAD, por ejemplo. – user611775

1

Sería deseable que los enlaces simbólicos se puedan utilizar de forma más transparente y también se puedan enviar. Podrían ser una herramienta poderosa para nuevos flujos de trabajo. Actualmente, si creo un enlace simbólico y luego presiono, el servidor tendrá el hash no el enlace en la referencia correspondiente.

Cuestiones relacionadas