[英]git checkout modifies too many files
我正在使用git發布網站。 工作流程大致如下:
$ git add my_file
$ git commit -m comment my_file
$ git push # Just house-keeping, goes to my master repo
$ git push ssh://user@webserver//var/www/repo.git
Web服務器上的接收后掛鈎看起來像這樣:
#!/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
在絕大多數情況下,這種方法都很好。 當我說好時,我的意思是,如果我添加了一個文件,則檢出會修改該文件。
僅當我等待一天然后再次提交並推送時,post-receive掛鈎中的git checkout才會重新獲取我的工作副本中的每個文件。 這不僅需要花費很多時間,而且還會與稍后運行的rsync混淆。
一夜之間會發生什么,以便明天發生的結帳與我今天可以一遍又一遍地重復的結局大不相同?
您是否正在使用分支? 從您的接收后鈎子看來,您並未過濾要用於托管網站代碼的引用。 而是,它為每個修改的引用執行檢出。 如果將一些代碼推送到另一個分支,則將更新您的站點以反映該情況。 我認為您可能只想對重要的ref(可能是refs/heads/master
)運行checkout,僅此而已。
也許正在改變
while read oldrev newrev ref ; do
branch=$(echo ${ref} | cut -d/ -f3)
GIT_WORK_TREE=${working} git checkout -f ${branch}
done
至
while read oldrev newrev ref ; do
if [ "$ref" == "refs/heads/master" ]; then
branch=$(echo ${ref} | cut -d/ -f3)
GIT_WORK_TREE=${working} git checkout -f ${branch}
fi
done
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.