全部的版本控制系統,其實只能跟蹤文本文件的改動,而圖片、視頻這些二進制文件,雖然也能由版本控制系統管理,但無法跟蹤文件的變化,只能把二進制文件每次改動串起來,例如記錄圖片從 100KB 改爲了 120KB,可是並不知道具體文件改了什麼。git
Microsoft 的 Word 格式是二進制格式,所以,版本控制系統是無法跟蹤 Word 文件的改動的。github
Microsoft 開發記事本的團隊使用了一個不合理的方法來保存 UTF-8 編碼的文件,他們在每一個文件開頭添加了 0xefbbbf(十六進制)的字符,建議使用Notepad++。算法
git存在一個.git文件,裏面存儲配置信息和分支,以及一個暫存區
在進行提交時
第一步是用git add把文件添加進去,實際上就是把文件修改添加到暫存區;
第二步是用git commit提交更改,實際上就是把暫存區的全部內容提交到當前分支。
而git diff是查看暫存區和工做區(實際文件夾內容)的區別,因此git add後git diff就再也不顯示區分
因此咱們能夠從暫存區、分支區、遠程庫 這三條途徑來還原歷史windows
分支其實是以圖存儲的,而所謂分支也及時master指針和其餘分支指針的改動,在A、B分支不平行時則直接改動指針完成分支合併,若存在平行段,會要求顯示的指定衝突部分如何肯定。數據結構
git中在Objects文件夾存儲組件,並利用hash算法SHA-1根據文件內容組件名,即造成鍵值對管理。
組件分四種:編碼
Tag 標籤命令行
Git中存在兩種對象 - 鬆散對象和打包對象。
簡單的理解就是鬆散對象存儲使用代價低,用來存文件的改變,打包對象代價高用來存儲一系列鬆散對象hash-offset用以組合成文件。
Git使用SHA-1值的前兩個字符做爲子目錄名字, 因此一個目錄中永遠不會包含過多的對象. 文件名則是餘下的38個字符。版本控制
github是基於git的面向開源及私有軟件項目的託管平臺,比較方便的github使用方式是利用github推出的GUI GithubDesktop。指針