回答
看看「Object storage format」 in Git User Manual。
它是使用zlib的原始壓縮數據。可以使用'zlib1g-dev'軟件包中的zpipe
。編譯the example與gcc -o zpipe zpipe.c -lz
。這不是一個標準.gz
什麼的。
./zpipe -d < .git/objects/02/43019ddb4d94114e5a8580eec01baeea195133
打印BLOB的內容(頭+數據)
如果您要檢查的SHA-1,你必須把未壓縮的BLOB文件(myblob
)和做
sha1sum myblob
不幸的是,這不適用於打包對象(一些已經在倉庫中一段時間了)。 – 2012-12-05 13:26:32
你的意思是說目標文件只包含DEFLATE有效載荷,而不包含其他元數據字段,如:https://www.ietf.org/rfc/rfc1952.txt中所述,所以這就是爲什麼'gunzip'不能工作? – 2014-09-05 08:17:48
如果要查看Git對象的純文本形式(提交和/或斑點,即文件內容)使用Git 沒有,它不會是容易的,特別是如果儲存庫包裝。難道你不能在本地安裝git到你的主目錄(或MacOS X上的等價物)嗎?
寬鬆對象的格式,作爲文件存儲在.git/objects/
扇出目錄中,例如, .git/objects/02/43019ddb4d94114e5a8580eec01baeea195133
(扇出目錄和文件名稱形式的對象的SHA-1標識符)被描述,例如, 「Pro Git」書(可在線免費)和Chapter 7.1 "How Git Stores Objects"「Git Community Book」中的Chapter 9.2 "Git Objects"。
包格式,其中對象的集合存儲在.git/objects/pack/
的單個文件中,例如, .git/objects/pack/pack-1db7aa96d95149a4dd341490a3594181a24415ee.pack
,在Documentation/technical/pack-format.txt和「Git的社區書」 Chapter 7.5 "The Packfile"描述(在「臨Git的」的Chapter 9.4 "Packfiles"提到的)如果你想找到最新的提交,在.git/HEAD
文件先來看看找
當前分支。它將包含如下內容:
ref: refs/heads/master
(如果它包含SHA-1,您可以將其作爲上次提交的ID並跳過一個步驟)。然後檢查例如.git/refs/heads/master
找到分支指向的地方。它將包含SHA-1的承諾,例如:
dbc1b1f71052c084a84b5c395e1cb4b5ae526fcb
最後(最近)承諾將很可能在寬鬆的格式;在這個例子中它將在.git/objects/db/c1b1f71052c084a84b5c395e1cb4b5ae526fcb
文件中。
我將用不同的方式解釋你的問題。如果你想了解對象文件是什麼,你可以使用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
這一個是一個提交,其他目的可以是文件的斑點,樹木等
這似乎是* some *問題的一個很好的答案:P – 2013-07-11 20:03:58
alias deflate="perl -MCompress::Zlib -e 'undef $/; print uncompress(<>)'"
deflate .git/objects/4b/3083256dedabd68e839d7717aa785424119990 | sha1sum
4b3083256dedabd68e839d7717aa785424119990 -
該指數是.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
以逐字段驗證格式。
下面的問題更側重於指數:What does the git index contain EXACTLY?
- 1. 如何在不使用Tig的情況下瀏覽Git日誌?
- 2. 如何在沒有git-clone的情況下獲得git項目?
- 3. 如何:在不使用MvcContrib.Grid的情況下使用MvcContrib.Pagination查看
- 4. 如何在沒有合適的git服務器的情況下使用git?
- 5. 在不使用Git倉庫的情況下使用Spring Cloud Config
- 6. 如何在不創建新對象的情況下引用substr?
- 7. 無用的Git緩存/索引對象?
- 8. 需要在不改變它的情況下查看類對象
- 9. 如何檢查git倉庫是否在不使用git命令的情況下更新
- 10. 如何在不使用Github的情況下使用Git進行項目協作?
- 11. 我應該如何使用git在這種情況下
- 12. 我可以在不安裝的情況下使用git嗎?
- 13. 如何在不檢查出來的情況下瀏覽不同的git分支
- 14. 如何在不觸發構建的情況下執行Git Push?
- 15. Git commit在我的情況下
- 16. 在這種情況下的GIT實施
- 17. 在不下載對象的情況下獲取引用
- 18. 狀態在不使用同一對象引用的情況下更改對象
- 19. 在不知道對象索引的情況下從數組中刪除對象?
- 20. 如何在不使用String的情況下創建JSON對象?
- 21. 如何在不使用git clone的情況下關閉Heroku的文件?
- 22. 如何在使用和不使用ssh驗證的情況下使用兩個不同版本庫的Git?
- 23. 在不使用.gitconfig的情況下設置Git用戶名和電子郵件?
- 24. 如何在不使用git push的情況下共享本地更改?
- 25. 如何在不使用Git的情況下處理大文件LFS
- 26. 如何查看git索引中的更改?
- 27. 如何在不使用對象的情況下檢查DataGridViewComboBoxColumn中的項目?
- 28. 如何在沒有看到遠程輸出的情況下`git push`
- 29. 查看在特定情況下不塗
- 30. 在不使用引用或索引的情況下引用列表中的對象
這些文件本身不支持純文本,並視其爲這樣,你需要一個程序,從他們的格式轉換成文本。。 Git是一個包含精心設計的組件的程序。如果有人再寫一篇,我會非常驚訝。 – Cascabel 2009-10-07 15:38:32
那麼對象(特別是提交對象)將不會轉換爲純文本? – 2009-10-07 15:56:32
它們*至少*使用zlib(deflate)壓縮進行壓縮。 – 2009-10-07 17:22:37