Как просматривать объекты git и индекс без использования git - PullRequest
16 голосов
/ 07 октября 2009

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

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

Ответы [ 5 ]

14 голосов
/ 20 февраля 2011
alias deflate="perl -MCompress::Zlib -e 'undef $/; print uncompress(<>)'"

deflate .git/objects/4b/3083256dedabd68e839d7717aa785424119990 | sha1sum
4b3083256dedabd68e839d7717aa785424119990  -
10 голосов
/ 07 октября 2009

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

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

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


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

ref: refs/heads/master

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

dbc1b1f71052c084a84b5c395e1cb4b5ae526fcb

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

9 голосов
/ 08 января 2010

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

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

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

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

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

sha1sum myblob
8 голосов
/ 08 января 2010

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

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

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

git show 04a42e

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

> git show 04a42e
commit 04f7db976fa54c72fcc6350dd7d0aa06cb249df6
Author: Alex Brown <alex@XXXX.XXX>
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

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

0 голосов

Индекс хранится в .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 содержит ТОЧНО?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...