如何在 VPS 上使用 Git 设置自动部署

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。

介绍

要了解 Git 的基本知识以及如何安装,请参考介绍教程。

本文将教你如何在部署应用程序时使用 Git。虽然有许多使用 Git 部署应用程序的方法,本教程将专注于最直接的方法。我假设你已经知道如何在本地机器上创建和使用存储库。如果不知道,请参考此教程。

当你使用 Git 时,工作流通常是朝向版本控制。你有一个本地存储库用于工作,还有一个远程存储库用于保持一切同步,并且可以与团队和不同的机器一起工作。但你也可以使用 Git 将应用程序移动到生产环境。

服务器设置

我们的虚构工作空间:

你的服务器实际目录:/var/www/domain.com

你的服务器存储库:/var/repo/site.git

如果我们想要推送到 site.git,同时让所有内容都在 /var/www/domain.com 可用,我们应该怎么做呢?

创建我们的存储库

从命令行登录到你的 VPS,然后输入以下命令:

cd /var
mkdir repo && cd repo
mkdir site.git && cd site.git
git init --bare

--bare 表示我们的文件夹将没有源文件,只有版本控制。

钩子

Git 存储库有一个名为 ‘hooks’ 的文件夹。该文件夹包含一些示例文件,用于可能的操作,你可以挂钩并执行你设置的自定义操作。

Git 文档 定义了三种可能的服务器钩子:pre-receivepost-receiveupdatepre-receive 在服务器接收到 push 后立即执行,update 类似,但它对每个分支执行一次,post-receivepush 完全完成时执行,这是我们感兴趣的。

在我们的存储库中,如果你输入:

ls

你会看到一些文件和文件夹,包括 hooks 文件夹。所以让我们进入 hooks 文件夹:

cd hooks

现在,通过输入以下命令创建文件 post-receive

cat > post-receive

当你执行此命令时,会有一行空白,表示你输入的所有内容将保存到这个文件中。所以让我们输入:

#!/bin/sh
git --work-tree=/var/www/domain.<WBR>com --git-dir=/var/repo/site.git checkout -f

完成输入后,按下 control-d 保存。为了执行该文件,我们需要使用以下命令设置适当的权限:

chmod +x post-receive

你可以在文档中看到,git-dir 是存储库的路径。使用 work-tree,你可以定义文件实际传输到的不同路径。

post-receive 文件将在每次推送完成时被查看,它表示你的文件需要在 /var/www/domain.com 中。

本地机器

让我们创建我们的本地存储库。你应该根据自己的选择更改路径和名称。如果你在 VPS 上,只需输入:

exit

然后创建你的存储库:

cd /my/workspace
mkdir project && cd project
git init

然后,我们需要配置存储库的远程路径。告诉 Git 添加一个名为 live 的远程:

git remote add live ssh://user@mydomain.com/var/<WBR>repo/site.git

这里应该提供存储库链接,而不是实际的 live 文件夹。

假设我们在这个文件夹中有一些很棒的工作准备好了。我们应该执行添加文件和提交消息的常规步骤:

git add .
git commit -m "My project is ready"

git add 后的点表示你正在将所有文件添加到暂存区。在 git commit 后,我们有 -m,表示我们将输入一条消息。最后,我们将一切都推送到服务器。我们使用了在设置远程时使用的 live 别名。

git push live master

这里我们告诉 Git 推送到 live 远程的 master 分支。要了解更多关于分支以及如何使用它的信息,你可以阅读此教程。

Beta

如果你不想一次部署所有内容怎么办?也许你想先测试一下,并有一个 beta 目录。

其中一种方法是创建另一个存储库。让我们再次登录到我们的 VPS 并创建我们的目录:

cd /var/www/
mkdir beta

创建我们的存储库:

cd /var/repo
mkdir beta.git && cd beta.git
git init --bare

同样,我们应该创建 post-receive 文件,因为我们想在 beta 目录中看到我们的项目:

cd hooks
cat > post-receive

输入文件内容:


```sh
#!/bin/sh
git --work-tree=/var/www/beta --git-dir=/var/repo/beta.git checkout -f

当你完成输入后,按下‘control-d’保存。为了执行该文件,我们需要使用以下命令设置适当的权限:

chmod +x post-receive

让我们回到本地代码库:

exit
cd /my/workspace/project

现在我们可以设置另一个指向 beta 仓库的远程地址:

git remote add beta ssh://user@mydomain.com/var/<WBR>repo/beta.git

有了这个设置,我们可以进行两步操作。首先推送到 beta 并进行检查,如果一切正常,再推送到 live:

git add .
git commit -m "New version"
git push beta master

然后:

git push live master

从服务器上线

也许你有一个团队在同一个项目上工作,你希望其他人也能决定何时上线。为了实现这一点,我们可以在服务器上将 beta 仓库和 live 仓库进行关联。登录到你的 VPS 并输入以下命令:

cd /var/repo/beta.git
git remote add live ../site.git

现在你可以在服务器上从 beta 推送到 live:

cd /var/repo/beta.git
git push live master

恭喜!你的 VPS 现在已经设置为使用 Git 进行自动部署!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/482573.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

map用于leetcode

//第一种map方法 function groupAnagrams(strs) {let map new Map()for (let str of strs) {let key str ? : str.split().sort().join()if (!map.has(key)) {map.set(key, [])}map.get(key).push(str)} //此时map为Map(3) {aet > [ eat, tea, ate ],ant > [ tan,…

文件比较和文件流

文件比较和文件流 一、文本比较工具 diff1.基本用法1.1输出格式 2.常用选项 二、文件流1.文件的打开模式2.文件流的分类ifstreamofstreamfstrem区别 3.文件流的函数1. 构造函数2. is_open 用于判断文件是否打开3. open4. getline5. close6. get()7. read8. write9. put10. gcou…

《如何使用Unity的Avatar人偶以及启动重定向-实现2个或多个人物模型使用同一个动画片段》

8.5 使用Avatar和人物重定向 注意事项&#xff1a; 这个人偶以及重定向技术只能作用于人物模型&#xff01; 这个人偶以及重定向技术只能作用于人物模型&#xff01; 这个人偶以及重定向技术只能作用于人物模型&#xff01; 1. 基本原理 在Unity中&#xff0c;Avatar人偶和…

windows 应用 UI 自动化实战

UI 自动化技术架构选型 UI 自动化是软件测试过程中的重要一环&#xff0c;网络上也有很多 UI 自动化相关的知识或资料&#xff0c;具体到 windows 端的 UI 自动化&#xff0c;我们需要从以下几个方面考虑&#xff1a; 开发语言 毋庸置疑&#xff0c;在 UI 自动化测试领域&am…

百度 文心一言 vs 阿里 通义千问 哪个好?

背景介绍&#xff1a; 在当前的人工智能领域&#xff0c;随着大模型技术的快速发展&#xff0c;市场上涌现出了众多的大规模语言模型。然而&#xff0c;由于缺乏统一且权威的评估标准&#xff0c;很多关于这些模型能力的文章往往基于主观测试或自行设定的排行榜来评价模型性能…

基于协同推荐的黔醉酒业白酒销售系统

文末获取源码和万字论文 摘 要 基于协同推荐的黔醉酒业白酒销售系统主要针对黔醉酒业的具体业务需求所设计&#xff0c;现阶段阶段我国大型企业都会有自己的电商平台以及销售管理系统&#xff0c;其功能对于中小型过于冗长复杂&#xff0c;成本也不是中小型企业能够承受的&…

解决jupyter notebook 新建或打开.ipynb 报500 : Internal Server Error(涉及jinja2兼容性问题)

报错&#xff1a; [E 10:09:52.362 NotebookApp] 500 GET /notebooks/Untitled16.ipynb?kernel_namepyt hon3 (::1) 93.000000ms refererhttp://localhost:8888/tree ...... 重点是&#xff1a; from .exporters import * File "C:\ProgramData\Anaconda3\lib\site-p…

Kali Linux系统一键汉化中文版及基础使用详细教程

Kali Linux系统一键汉化中文版及基础使用详细教程 引言 Kali Linux是一款基于Debian的Linux发行版&#xff0c;专为渗透测试和网络安全而设计。由于其强大的功能和丰富的工具&#xff0c;Kali Linux在安全领域得到了广泛应用。然而&#xff0c;许多用户在使用Kali Linux时会遇…

LLaMA-Factory 上手即用教程

LLaMA-Factory 是一个高效的大型语言模型微调工具&#xff0c;支持多种模型和训练方法&#xff0c;包括预训练、监督微调、强化学习等&#xff0c;同时提供量化技术和实验监控&#xff0c;旨在提高训练速度和模型性能。 官方开源地址&#xff1a;https://github.com/hiyouga/L…

使用PyQt5开发一个GUI程序的实例演示

一、安装Python 下载安装到这个目录 G:\Python38-32 安装完成有这些工具&#xff0c;后面备用&#xff1a; G:\Python38-32\Scripts\pyrcc5.exe G:\Python38-32\Scripts\pyuic5.exe 二、PyQt环境配置 pip install PyQt5 pip install pyqt5-tools 建议使用国内源&#xff0c…

【开源免费】基于Vue和SpringBoot的校园资料分享平台(附论文)

博主说明&#xff1a;本文项目编号 T 059 &#xff0c;文末自助获取源码 \color{red}{T059&#xff0c;文末自助获取源码} T059&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析…

LocalDateTime序列化(跟redis有关)

使用过 没成功&#xff0c;序列化后是[2024 11 10 17 22 20]差不多是这样&#xff0c; 反序列化后就是&#xff1a; [ 2024 11 10.... ] 可能是我漏了什么 这是序列化后的&#xff1a; 反序列化后&#xff1a; 方法&#xff08;加序列化和反序列化注解&#xff09;&…

32 从前序与中序遍历序列构造二叉树

32 从前序与中序遍历序列构造二叉树 32.1 从前序与中序遍历序列构造二叉树解决方案 class Solution { public:TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {return buildTreeHelper(preorder, inorder, 0, 0, inorder.size() - 1)…

【韩顺平老师Java反射笔记】

反射 文章目录 基本使用反射机制java程序在计算机有三个阶段反射相关的主要类 反射调用优化Class类的常用方法获取Class对象的6种方式哪些类型有Class对象类加载类加载时机类加载过程图 通过反射获取类的结构信息第一组&#xff1a;java.lang.Class类第二组&#xff1a;java.la…

Python实现2048小游戏

2048是一个单人益智游戏&#xff0c;目标是移动和合并数字&#xff0c;以达到2048。 1. 实现效果 Python实现2048小游戏 2. 游戏规则 简单地理解一下规则 基本规则&#xff1a; 4x4棋盘&#xff0c;每个格可包含一个2的倍数的数字&#xff0c;初始时为空&#xff0c;表示0。…

基于树莓派3B+的简易智能家居小项目(WiringPi库 + C语言开发)

github主页&#xff1a;https://github.com/snqx-lqh 本项目github地址&#xff1a;https://github.com/snqx-lqh/RaspberryPiSmartHome 硬件开源地址&#xff1a;https://oshwhub.com/from_zero/shu-mei-pai-kuo-zhan-ban 欢迎交流 树莓派智能家居项目&#xff0c;学习树莓派的…

MacOS安装MySQL数据库和Java环境以及Navicat

安装MySQL 去官网下载&#xff1a;MySQL 下载好后安装&#xff0c;在设置里往下滑&#xff0c;出现了这样&#xff0c;就代表安装成功了 接下来配置环境&#xff1a; 首先在我们的设备上找到终端并打开,输入 vim ~/.bash_profile(注意vim后面的空格)&#xff0c;输入完成后点击…

【论文笔记】Towards Online Continuous Sign Language Recognition and Translation

&#x1f34e;个人主页&#xff1a;小嗷犬的个人主页 &#x1f34a;个人网站&#xff1a;小嗷犬的技术小站 &#x1f96d;个人信条&#xff1a;为天地立心&#xff0c;为生民立命&#xff0c;为往圣继绝学&#xff0c;为万世开太平。 基本信息 标题: Towards Online Continuou…

手机控制载货汽车一键启动无钥匙进入广泛应用

移动管家载货汽车一键启动无钥匙进入手机控车系统‌&#xff0c; 该系统广泛应用于物流运输、工程作业等货车场景&#xff0c;为车主提供了高效、便捷的启动和熄火解决方案&#xff0c;体现了科技进步对物流行业的积极影响‌ 核心功能‌&#xff1a;简化启动流程&#xff0c;提…

「Mac畅玩鸿蒙与硬件34」UI互动应用篇11 - 颜色选择器

本篇将带你实现一个颜色选择器应用。用户可以从预设颜色中选择&#xff0c;或者通过输入颜色代码自定义颜色来动态更改界面背景。该应用展示了如何结合用户输入、状态管理和界面动态更新的功能。 关键词 UI互动应用颜色选择器状态管理用户输入界面动态更新 一、功能说明 颜色…