ver una todas tag son ramificacion ramas rama que presentación poner para listar las comando git diff git-submodules

todas - ¿Cómo puedo obtener el ID de confirmación asociado de un submódulo de git de una confirmación pasada en el clon padre?



que son las ramas gitlab (4)

¿Hay alguna manera, salvo verificar realmente la confirmación principal, de determinar el ID de confirmación SHA-1 de un submódulo basado en una identificación de confirmación en el clon padre? Sé que puedo encontrar el SHA-1 actualmente asociado con el ''submódulo git''.

Aquí hay un ejemplo: Tengo un clon con un solo submódulo ''foo'' que ha cambiado varias veces en el último mes. Tengo una etiqueta en el clon padre que tiene algunas semanas de antigüedad llamada ''released-1.2.3''. Quiero averiguar qué fue el SHA-1 asociado de ''foo'' para este commit etiquetado. Podría simplemente echar un vistazo a ''released-1.2.3'' y usar git-submodule para ver, pero me pregunto si hay una forma de hacerlo sin afectar el árbol de trabajo, ya que quiero crear un script.

Quiero hacer esto porque quiero construir un script para hacer un ''diff'' en todos los cambios dentro de un submódulo entre dos commits dentro del repositorio padre, es decir, "dime qué archivos cambiaron dentro del submódulo ''foo'' entre estos dos commits en el padre."


Encontré una avenida prometedora:

$ git log --raw <since>..<until> --submodule -- <path/to/submodule>

Con la opción --raw, esto imprime los ID SHA-1 (abreviados) correspondientes a las confirmaciones asociadas del submódulo. Lamentablemente, el resultado es muy prolijo y tomará algún trabajo para procesar en un script.

Lo que realmente necesito es una instalación de git que, dado un ID de confirmación padre, me dé el último cambio a un submódulo antes de esa confirmación. Es decir, qué submódulo SHA-1 ''actualización del submódulo git'' verificaría si tuviera que pagar el compromiso de los padres.


Este trabajó para mí:

$ git rev-parse released-1.2.3^{commit}:foo <SHA1>

Quizás también sea bastante fácil de usar en script.



Puede usar git-ls-tree para ver cuál era la identificación SHA-1 de una ruta determinada durante una confirmación determinada:

$ git ls-tree released-1.2.3 foo 160000 commit c0f065504bb0e8cfa2b107e975bb9dc5a34b0398 foo

(Mi primer pensamiento fue git show released-1.2.3 foo , pero eso falla con "fatal: bad object").

Como está scripting el resultado, es probable que desee obtener solo el id. SHA-1, por ejemplo:

$ git ls-tree released-1.2.3 foo | awk ''{print $3}'' c0f065504bb0e8cfa2b107e975bb9dc5a34b0398

Además: Cuando escriba scripts en git, intente seguir los comandos de plumbing , como se describe en el manual. Tienen una interfaz más estable, mientras que los comandos más familiares de "porcelana" posiblemente cambien de formas incompatibles.