【发布时间】:2011-09-01 01:19:13
【问题描述】:
以下是我构建 git-powered-website 更新和备份策略的方式:
我可以通过 SSH 访问托管网站的 Linux VPS。这是我所做的:
1) 在网站服务器上 - 在适当的网站文件夹(公共根目录之前的一级)中创建了一个 git 存储库:
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 repo,如果需要,我可以及时向后移动。我不需要太害怕因意外覆盖或删除而丢失东西......而且这个过程是自动化的!
我每天都会收到几封来自 cronjobs 的电子邮件。它允许我检查网站中的更改,并确认两个 cronjobs 都在正确运行。 (设置了另一个 cronjob 来执行数据库备份。)
4) 设置开发(本地存储库 + 工作树)- 我直接从网站上检查了一个副本,然后创建了一个名为“dev”的新本地分支:
git clone ssh://user@example.com/path/to/website website_local
git checkout -b dev
现在,我可以玩开发分支,做我的工作了。
从这一点开始,我想知道:
- 如何将我的更改推送回实时网站?
- 如何从网站取回更改并合并到我的开发分支?
简而言之:如何在不搞砸的情况下正确地将实时站点与开发分支同步?
【问题讨论】:
-
好吧,您可以将其拆分为您的原始问题,然后自行回答其余问题。欢迎来到rubber ducking btw ;)
-
我们在 stackoverflow 上是否有某种 Wiki? - 我认为您正在寻找的东西称为“博客”:)
-
@Tom - 你欠我一个新键盘!
-
感谢 cmets 的快乐! :) 我问“当你在写的时候回答你自己的问题怎么办?”在 meta-stackoverflow 并在那里学到了一些新东西...meta.stackexchange.com/questions/92534/…
-
@Tobias 也许反对意见来自渴望回答的人......他们读了很多书但没有什么可回答的......按照你的建议和那些找到的和 meta-stackoverflow,我只是拆分了文本在我最初有疑问的时候......现在我必须等待 8 小时才能发布我自己的答案(像我这样的新用户的政策)......
标签: git deployment githooks