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 .