Git: get ruta de blob en el directory .git

Quiero acceder a algunos blobs en algún momento de la historia del repository.

Actualmente, lo hago con git show $REV:$PATH . Pero los files son bastante grandes y no quiero que se lean y se procesen en secuencia de commands. Quiero get su ruta y luego leer como files sin formatting.

¿Puedo confiar en el layout descrito en la documentation actual (por ejemplo, .git/objects/ee/2403ffd236587a2b17ddc35b0e711fc99ba6a0 ), get hash de files y transformarlo en ruta de forma manual? Quiero decir que no cambiará pronto en futuras versiones y el directory de objects siempre tiene esta estructura. ¿Hay alguna forma más simple de hacerlo con un poco de command de plomería?

Si bien los datos de blob son inviolables y sacrosantos , también están en un formatting inutilizable para los simples mortales:

  • Como dijo j6t en un comentario , está zlib-deflated (pero este es un detalle de implementación, no una promise, es decir, se supone que no debes simplemente abrirlo y leerlo y usar un inflador zlib para restaurarlo, se supone que debes dejar que Git haz eso por ti).

  • Como dijo Leon en un comentario , puede haber sido empaquetado , en cuyo caso no hay un file de object desempaquetado para abrir y leer en primer lugar. En cambio, tendrías que abrir los files de índice del package (para encontrar el file del package correcto) y luego el file del package correcto (para encontrar los datos de empaque con el directory que ubica el object y sus bases) y luego deshacer el estilo xdelta , pero en realidad no es xdelta , la compression de esos elementos.

Si quiere leer el file con commands de plomería, primero puede encontrar el hash:

 $ git rev-parse HEAD~20:Makefile bdb55792f11a9f9565c4aad147a492caed7f09c3 

y luego use git cat-file -p para extraer el object sin formatting, o git cat-file -t para get su tipo (o --batch-check para leer información sobre el object, etc.). Tenga en count que, de hecho, puede pasar la ruta directamente a git cat-file también:

 $ git cat-file -t HEAD~20:Makefile blob 

Tenga en count, sin embargo, un obstáculo potencial más: al acceder al contenido de un blob con git cat-file -p <blob-specifier> o git show <blob-specifier> , se obtiene el formatting en el repository de los datos. Es decir, cuando se comtesting una confirmación específica (con git checkout ), Git extraerá un file .gitattributes y / o usará la git config configuration de git config para encontrar los filters de manchas y / o los ajustes de CR-LF que se deben realizar. Estos filters se aplican a los datos del repository para producir la copy del tree de trabajo del file. Pero cuando usas git show o git cat-file -p para acceder a los datos del repository, no se usan filters .