以下是我构建 git-powered-website 更新和备份策略的方式:
我可以通过 SSH 访问托管网站的 Linux VPS。这是我所做的:
1)在网站服务器 - 在适当的网站文件夹(公共根之前的一级)创建了一个 git repo:
cd /path/to/website
git init
git add -A
git commit -m "Website as of today."
2) 在备份服务器上 - 在另一个 VPS 上创建了一个镜像仓库,用于备份目的:
git clone --mirror ssh://user@example.com/path/to/website website_backup
请注意,镜像仓库也是一个裸仓库(没有签出的工作树)。
3) 设置 CRONJOBS - 一个在网站服务器上,用于吸收 wesbite 文件系统的更改(可以通过脚本、FTP 等进行更改)。它每天运行以下 bash 脚本:
#!/bin/bash
date=$(date +%d/%m/%Y)
cd /path/to/website
git add -A -v
git commit -m "Changes done at to website at ${date}"
exit 0
这样,实时网站更改将提交到存储库主分支。
在备份服务器上设置了另一个 cronjob。它每天运行以下脚本,就在上面的另一个之后:
#!/bin/bash
cd /path/to/website_backup
git fetch -u ssh://user@example.com/path/to/website
exit 0
这样,我在备份服务器上就有了每日更新的“备份”,这也是一个 git 存储库,允许我在必要时及时向后移动。我不需要太害怕因意外覆盖或删除而丢失东西......而且这个过程是自动化的!
我每天都会收到来自 cronjobs 的几封电子邮件。它允许我检查网站中的更改,并确认两个 cronjobs 都在正确运行。(设置了另一个 cronjob 来执行数据库备份。)
4)设置开发(本地回购+工作树) - 我直接从网站上签出一个副本,然后创建一个名为“dev”的新本地分支:
git clone ssh://user@example.com/path/to/website website_local
git checkout -b dev
现在,我可以玩开发分支,做我的工作了。
从这一点,我想知道:
- 如何将我的更改推送回实时网站?
- 如何从网站取回更改并合并到我的开发分支?
简而言之:如何正确地将实时站点与开发分支同步而不搞砸?