Используя терминал OS X,
Как вы просматриваете содержимое этих файлов в виде обычного текста?
Используя терминал OS X,
Как вы просматриваете содержимое этих файлов в виде обычного текста?
Посмотрите "Формат хранения объектов" в Git Руководство пользователя.
Это сжатые сжатые данные, используя zlib. Можно использовать zpipe
из пакета "zlib1g-dev". Скомпилируйте пример с помощью gcc -o zpipe zpipe.c -lz
. Это не стандарт .gz
или что-то еще.
./zpipe -d < .git/objects/02/43019ddb4d94114e5a8580eec01baeea195133
печатает содержимое блоба (заголовок + данные)
Если вы хотите проверить SHA-1, вы должны поместить несжатый кадр в файл (myblob
) и сделать
sha1sum myblob
alias deflate="perl -MCompress::Zlib -e 'undef $/; print uncompress(<>)'"
deflate .git/objects/4b/3083256dedabd68e839d7717aa785424119990 | sha1sum
4b3083256dedabd68e839d7717aa785424119990 -
Если вы хотите просмотреть текстовую форму 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
.
Я собираюсь интерпретировать ваш вопрос по-другому. Если вы хотите понять, что представляют собой файлы объектов 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
Это коммит, другие объекты могут быть файловыми блоками, деревьями и т.д.
Индекс хранится в .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 ТОЧНО?