git网站更新策略-如何同步开发库和实时存储库?

如何解决git网站更新策略-如何同步开发库和实时存储库?

| 这就是我构建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 repo,允许我在必要时及时返回。我不必担心由于意外的覆盖或删除而丢失内容……过程是自动化的! 我每天都会收到来自cronjobs的几封电子邮件。它使我可以检查网站上已进行的更改,并确认两个cronjobs均正常运行。 (设置了另一个cronjob来执行数据库备份。) 4)设置开发(本地回购+工作树)-我直接从网站签出副本,然后创建了一个新的本地分支,称为“ dev”:
git clone ssh://user@example.com/path/to/website website_local
git checkout -b dev
现在,我可以在开发部门玩,并做我的工作。 从这一点来看,我想知道: 如何将我的更改推回实时网站? 如何从网站获取更改并合并到我的开发部门? 简而言之:如何正确地将实时站点与dev分支同步而又不搞乱呢?     

解决方法

这是我实现的解决方案,可以满足将我的开发工作推向“生产”(实时网站)的需求,并且可以使我的本地存储库与实时网站上发生的更改保持最新... 要更新网站,只需要将我的本地开发分支推送到网站存储库即可。
git push origin dev
...然后将更改合并到实时网站树中。我需要SSH登录网站服务器,并在网站文件夹中运行以下命令:
git merge dev
这会将推送的更改从\“ dev \”分支带到\“ master \”分支(这是活动站点的当前分支)。 *改善更新过程* 为了自动运行合并,而无需从服务器命令行登录并运行merge命令,我向实时网站存储库添加了一个接收后挂钩。首先,我创建了挂钩文件,使其可执行,然后编辑了该文件:
touch /path/to/website/.git/hooks/post-receive
chmod a+x /path/to/website/.git/hooks/post-receive
pico /path/to/website/.git/hooks/post-receive
我的接收后挂钩文件的内容是:
#!/bin/sh
unset GIT_DIR
cd /path/to/website
echo \"Merging dev changes to master branch.\"
git merge --ff-only dev
exit 0
请注意--ff-only选项添加到合并命令。为什么在那儿?在那里是因为作为一个自动化过程,我不想将合并冲突存储到我的实时网站文件中。因此,使用此选项,仅当我具有干净的快进上下文时,我才强制执行合并。如果无法进行这种干净的合并,那么我可能会登录到服务器,然后手动解决此问题,或者使用另一种方法解决问题。 *避免冲突和同步* 为了避免在服务器上发生合并冲突,即,确保在服务器上成功进行快速转发合并,最好使用远程仓库中的最新更改来更新本地仓库。换句话说:在推动我们的更改之前,使用最新的实时网站更改(远程主分支)更新本地开发分支。可以这样完成:
git pull origin master
更好的是:让我们先更新本地master分支,然后将其合并到本地开发分支(听起来像是变基):
git stash save
git checkout master
git pull origin master
git checkout dev
git stash pop
git merge master
这样,我们的本地master分支与远程实时网站master分支保持同步,并且合并在本地100%执行。 *返回简单性* 我创建了一个别名来简化操作:
git config alias.deploy \'!git stash save && git checkout master && git pull origin master && git checkout dev && git stash pop ; git merge master && git push origin dev\'
现在,我可以使用\“ deploy \”别名执行实时站点更新,如下所示:
git deploy
它会: 切换到本地主分支 使用网站最新的提交更改来更新本地主分支(同步) 切换回开发分支 合并对本地dev分支的更改(如果需要,请在此处解决冲突) 将本地dev分支推送到远程网站dev分支 在服务器上正确设置了post-receive钩子之后,它将自动快速转发网站存储库,因此开发更改将发布到生产环境中! 我已经完成此设置,并且可以满足我当前的需求,这很简单。     ,您可能需要查看http://joemaller.com/990/a-web-focused-git-workflow/和http://toroid.org/ams/git-website-howto以获得有关集成git和web的更多信息部署系统。 请记住,git不是Web部署系统(尽管使用一些简单的脚本,它可以对那些有简单需求的人起作用)。     ,或者,您可以像Github一样使用Git和Jekyll     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 <select id="xxx"> SELECT di.id, di.name, di.work_type, di.updated... <where> <if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 <property name="dynamic.classpath" value="tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams['font.sans-serif'] = ['SimHei'] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -> systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping("/hires") public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate<String
使用vite构建项目报错 C:\Users\ychen\work>npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-