Подтвердить что ты не робот

Как просмотреть объекты и индекс git без использования git

Используя терминал OS X,

Как вы просматриваете содержимое этих файлов в виде обычного текста?

4b9b3361

Ответ 1

Посмотрите "Формат хранения объектов" в Git Руководство пользователя.

Это сжатые сжатые данные, используя zlib. Можно использовать zpipe из пакета "zlib1g-dev". Скомпилируйте пример с помощью gcc -o zpipe zpipe.c -lz. Это не стандарт .gz или что-то еще.

./zpipe -d < .git/objects/02/43019ddb4d94114e5a8580eec01baeea195133

печатает содержимое блоба (заголовок + данные)

Если вы хотите проверить SHA-1, вы должны поместить несжатый кадр в файл (myblob) и сделать

sha1sum myblob

Ответ 2

alias deflate="perl -MCompress::Zlib -e 'undef $/; print uncompress(<>)'"

deflate .git/objects/4b/3083256dedabd68e839d7717aa785424119990 | sha1sum
4b3083256dedabd68e839d7717aa785424119990  -

Ответ 3

Если вы хотите просмотреть текстовую форму git объектов (коммит и/или blobs, то есть содержимое файла) без использования git, это будет непросто, особенно если репозиторий упакован. Не можете ли вы установить git локально, в ваш домашний каталог (или его эквивалент на MacOS X)?

Формат для свободных объектов, хранящихся в файлах в каталоге .git/objects/ fan-out, например. .git/objects/02/43019ddb4d94114e5a8580eec01baeea195133 (каталог вентилятора и имя файла формы SHA-1 идентификатор объекта), описывается, например. в Глава 9.2 "Git Объекты" книги "Pro Git" (доступно в режиме онлайн бесплатно) и Глава 7.1 "Как git Сохраняет объекты" в "Git Community Book".

Формат pack, где набор объектов хранится в одном файле в .git/objects/pack/, например. .git/objects/pack/pack-1db7aa96d95149a4dd341490a3594181a24415ee.pack, описывается в Documentation/technical/pack-format.txt и в Глава 7.5 "Packfile" из Git Community Book "(и упоминается в Глава 9.4" Packfiles " "Pro Git" )


Если вы хотите найти последнюю фиксацию, сначала найдите файл .git/HEAD, чтобы найти текущую ветку. Он будет содержать следующее:

ref: refs/heads/master

(если он содержит SHA-1, вы можете взять его как идентификатор последнего коммита и пропустить шаг). Затем проверьте, например. .git/refs/heads/master, чтобы найти, на что указывает ветка. Он будет содержать SHA-1 фиксации, например:

dbc1b1f71052c084a84b5c395e1cb4b5ae526fcb

Последняя (последняя) фиксация будет, вероятно, в свободном формате; в этом примере это будет в файле .git/objects/db/c1b1f71052c084a84b5c395e1cb4b5ae526fcb.

Ответ 4

Я собираюсь интерпретировать ваш вопрос по-другому. Если вы хотите понять, что представляют собой файлы объектов ARE, вы можете использовать git для непосредственного просмотра их, не просматривая журнал истории или используя git checkout, diff и т.д. Например:

Для файла .git/objects/04/a42e9a7282340ef0256eaa6d59254227b8b141

Запустите команду

git show 04a42e

который объединяет 04 из /04/ и первые четыре символа оставшегося числа a42e.

> git show 04a42e
commit 04f7db976fa54c72fcc6350dd7d0aa06cb249df6
Author: Alex Brown <[email protected]>
Date:   Fri Jan 8 11:02:21 2010 +0000
a text file

diff --git a/1.txt b/1.txt
new file mode 100644
index 0000000..04a42e9
--- /dev/null
+++ b/1.txt
@@ -0,0 +1,3 @@
+Woo
+# boo
+# choo

Это коммит, другие объекты могут быть файловыми блоками, деревьями и т.д.

Ответ 5

Индекс хранится в .git/index.

Это двоичный несжатый формат, указанный по адресу: https://github.com/git/git/blob/master/Documentation/technical/index-format.txt, поэтому единственный способ его прочитать - с помощью инструмента типа hd.

Файл index содержит список файлов с их метаданными, включая inode, разрешения и время модификации. Он также содержит SHA-1 содержимого, который хранится как объект, а это означает, что при выполнении git add он может создавать новые объекты.

Я рекомендую вам создать простое тестовое репо, например git init init && cd init && echo a > a && git add a, а затем hd .git/index, чтобы проверить поле формата по полю.

Следующий вопрос больше посвящен индексу: Что содержит индекс git ТОЧНО?