具體描述見官網:
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