1
我使用git發佈網站。 工作流程大致是:在Web服務器上git checkout修改太多文件
$ git add my_file
$ git commit -m comment my_file
$ git push # Just house-keeping, goes to my master repo
$ git push ssh://[email protected]//var/www/repo.git
一個後收到鉤看起來是這樣的:
#!/bin/bash
working=$(pwd)
working=${working##*/}
working=../${working%.*}
while read oldrev newrev ref ; do
branch=$(echo ${ref} | cut -d/ -f3)
GIT_WORK_TREE=${working} git checkout -f ${branch}
done
絕大多數情況下這工作得很好。 當我說好的時候,我的意思是,如果我添加了一個文件,那麼checkout會修改這個文件。
只有當我等待一天然後再次提交&推送時,post-receive鉤子中的git checkout纔會重新獲取我工作副本中的每個文件。它不僅需要很長時間,還會隨後使用rsync運行。
一夜之間會發生什麼事情,以便明天發生的結帳與我今天可以一遍又一遍地重複的結帳大不相同?
我不是在所有使用分支。所以我總是看到git提到我已經在掌握了。但是,爲了消除模糊性,我將簡化post-receive鉤子。最大的問題是,它大部分時間都在運行,但如果我從最後一次推送後的一天內推出,則會失敗。 – craigemery
另外:不用'cut -d/-f3',通常最好用'$ {ref#refs/heads /}'去掉'refs/heads /'',以免這樣處理一個分支名稱,例如'refs/heads/foo/bar'就好像它只是'foo'而不是'foo/bar'。在這種情況下不是問題,但是,在這種情況下,您可以執行'branch = master'。 :-) – torek
是的。如果不是很明顯,我只是向他展示瞭如何設定該區塊的條件。我更喜歡使用你自己指出的符號。但是你是絕對正確的,在這種情況下,它可以被清理爲'branch = master',或者將分支名稱放在checkout命令中。 – jszakmeister