git 2.1.x 新特性 -- 隔離區域( QUARANTINE ENVIRONMENT)

具體描述見官網:

https://git-scm.com/docs/git-receive-pack#_quarantine_environment


簡單地說,git 2.1.x以後push代碼時,會把代碼先push到$GIT_DIR/objects/incoming-xxxx的一個隔離目錄,待相關鉤子驗證通過後再將新生成的對象(blob,tree,commit之類)放入到$GIT_DIR/objects 裏,如果鉤子驗證失敗則會回滾,隔離區域裏的對象直接被刪除。


新版本的這個機制對普通用戶無影響,只是在服務端的開發時,如果鉤子未驗證通過時,此時在服務端git log/git show xxx是查看不到新的提交的了。  如果硬要在相關鉤子的程序中,獲取隔離目錄中的文件,比如檢驗是否有二進制或大文件等,我纔去的方式是將指向隔離環境的環境變量GIT_QUARANTINE_PATH加入到GIT_ALTERNATE_OBJECT_DIRECTORIES即可,如果用git2go,libgit2則用他們新API git_repository_open_ext即可,其中flag需要設置爲GIT_REPOSITORY_OPEN_FROM_ENV

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章