git - 使用 'git pull' 与 'git checkout -f' 进行网站部署

标签 git web-deployment

我发现了两种使用裸远程存储库自动部署网站更新的常用方法。

第一个要求将 repo 克隆到网络服务器的文档根目录中,并在更新后 Hook 中使用 git pull

cd /srv/www/siteA/ || exit
unset GIT_DIR
git pull hub master

第二种方法将“分离的工作树”添加到裸存储库。 post-receive Hook 使用 git checkout -f 将存储库的 HEAD 复制到工作目录,即网络服务器文档根目录,即

GIT_WORK_TREE=/srv/www/siteA/ git checkout -f

第一种方法的优点是可以提交在网站工作目录中所做的更改并将其推送回裸仓库(但是不应在实时服务器上更新文件)。第二种方法的优点是 git 目录不在文档根目录中,但这很容易使用 htaccess 解决。

就最佳实践而言,一种方法客观上是否优于另一种方法?我还缺少哪些其他优点和缺点?

最佳答案

在发布管理(这里是部署)方面,最好有一个独立于发布机制的目标环境。
换句话说,第二个解决方案(checkout -f)将修改一个普通的 web 目录结构,没有任何其他不应该属于它的子目录(比如 .git > 文件夹)。
例如,我在“using git to deploy my node.js app to my production server”中使用它。

这最大限度地减少了任何副作用,并允许生产环境只处理它需要运行的内容,而不会受到干扰。

关于git - 使用 'git pull' 与 'git checkout -f' 进行网站部署,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12767657/

相关文章:

Github - 如何在我的个人资料中显示协作项目?

git - 远程 Pushurl 不起作用

layout - 在网页的 css3 渐变背景上带有文本的 Logo 图像

node.js - 有没有办法根据 package.json 的更改来更新特定的依赖项?

git - 从 bash 更新 github 上的文件

git - 线性化 git 历史,保留所有提交

git - 为什么在 git reset (--mixed) 之前显式调用 git reset --soft

css - 部署元素后无法在内容文件夹下找到 main.css

ruby-on-rails - 调试 Capistrano