Git-annex
最近幫客戶測試了大型檔案(>1G)放到Subversion與Git的效能問題, Git確實比Subversion快, 但是快的並是很讓客戶滿意, 觀察到了Git將檔案放到Local Repository會做 檢查檔案內容與上次版本的差異-->Git並不是存放每個版本的實體, 而是內容的差異部分, Binary檔案也是一樣, 所以這個動作鐵定會吃CPU的資源 存放到Local Repository前會先壓縮(壓縮比大約1:10)-->這個也是會吃CPU的資源 Local Repository存放與log處理--> 如果只存放差異部份與做壓縮, 這部份Disk I/O並部會很慢 所以從以上3個程序, 將大型的檔案要做版本控制, 無論是Git或是用Subversion, 都會很慢, 所以用Google找了一些相關資源, 找到了這一篇 http://stackoverflow.com/questions/540535/managing-large-binary-files-with-git , 從這個討論, 裡面有分享一個Open Source叫 git-annex , 這個git的延伸功能, 專門處理要使用Git來做大型檔案的版本控制, 像ISO image, VM image, Video檔案等等. 而且與Git repository完全相容. 簡單摘要這個git-annex的功能 git annex必須設定一個remote的storage, 這個remote storage就是用來存放大檔案的位置, 其存放格式使用key-value, 這個key應該就是git的revision, value是檔案的存放位置 當大檔案要進git repository, 必須用git annex來操作, 如git annex add, git annex commit 大檔案存放在git repository只是一個symbolic link告訴git annex真正的對應版本檔案放在哪裡 使用git annex commit的時候, 就省去了檔案內容比較, 與壓縮的時間, 但是要將檔案放到annex remote storage git annex remote storage支援許多, 例如目錄(可以指到外部磁碟), rsy