如何将您的Git存储库备份到腾讯云COS

介绍

依赖源代码存储库进行版本控制是一种最佳的方法,当代码更改导致应用程序崩溃或行为不正常时,可以恢复运行。但是,如果发生诸如不小心删除分支或无法访问存储库等严重性事件,我们应该利用其他更高级恢复策略。

将我们的代码存储库备份到对象存储基础架构中时,就为我们提供了可以在需要时恢复的数据的异地副本。COS是腾讯云的对象存储解决方案,为用户提供存储数字资产,文档和代码备份的地方。

COS允许我们使用Coscmd等工具与之交互。Coscmd是一个客户端工具,我们可以通过命令行或通过脚本来上传,检索和管理来自对象存储的数据。

在本教程中,我们将演示如何使用Coscmd将远程Git存储库备份到腾讯云 COS。为了实现这一目标,我们将安装和配置Git,安装Coscmd,并创建脚本以将Git存储库备份到我们的COS中。

准备

要使用COSs,您需要一个腾讯云帐户。如果您还没有,可以在注册页面注册。从那里,您需要设置您的腾讯云 COS并创建一个API密钥。创建后,您需要保留以下有关COS的详细信息secret_idsecret_keybucketregion等参数,这些参数请继续阅读本文获取。

一台已经设置好可以使用sudo命令的非root账号的Ubuntu 16.04服务器。没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后在购买服务器

设置好COSs信息和服务器后,请继续下一部分以安装Git。

安装Git

在本教程中,我们将使用远程Git存储库,并将复制我们的服务器。Ubuntu安装了Git并准备在其默认存储库中使用,但此版本可能比最新版本旧。

我们可以使用apt包管理工具来更新本地包索引,下载并安装最新的Git版本。

$ sudo apt-get update
$ sudo apt-get install git

要以更恰当的方式安装Git并确保您拥有最新版本,可以参考如何在Ubuntu系统上安装Git

我们将从Git存储库的URL备份,因此我们不需要在本教程中配置Git。有关配置Git的指导,请参考如何在Ubuntu系统上安装Git

现在我们将继续克隆我们的远程Git存储库。

克隆远程Git存储库

为了克隆我们的Git存储库,我们将创建一个脚本来执行该任务。创建脚本允许我们使用变量并对确保我们不会在命令行上出错有帮助。

要编写我们的可执行脚本,我们将创建一个使用文本编辑器nano 创建一个名为cloneremote.sh的新shell脚本文件。

$ nano cloneremote.sh

在这个空白文件中,让我们编写以下脚本。

                                        cloneremote.sh
#!/bin/bash
​
remoterepo=your_remote_repository_url
localclonedir=repos
clonefilename=demoprojectlocal.git
​
git clone --mirror $remoterepo $localclonedir/$clonefilename

让我们来看看这个脚本的每个元素。

第一行 - #!/bin/bash表示该脚本将由Bash shell运行。从那里,我们定义将在命令中使用的变量,这些变量将在我们执行脚本后运行。这些变量定义了以下配置:

  • remoterepo正被分配在我们将从中备份的远程Git存储库URL中
  • localclonedir 指的是我们将远程存储库克隆到的服务器目录或文件夹,在本例中我们已经调用它,叫repos
  • clonefilename是指我们将提供给本地克隆存储库的文件名,在本例中我们称之为 demoprojectlocal.git

然后,在脚本末尾的命令中直接调用这些变量。

该脚本的最后一行使用从git命令开始的Git命令行客户端。从那里,我们要求clone使用--mirror标记克隆存储库,并将其作为存储库的镜像版本执行。这意味着克隆的存储库将与原始存储库完全相同。我们调用上面定义的三个使用$命名的变量。

如果您对所编写的脚本的正确率感到满意,可以通过输入CTRL+ x键退出nano编辑器,并在提示保存文件时按y

此时,我们可以使用以下命令运行shell脚本。

$ sh cloneremote.sh

运行该命令后,您将收到类似于以下内容的输出。

Output
Cloning into bare repository './repos/demoprojectlocal.git'...
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (3/3), done.
Checking connectivity... done.

此时,如果列出当前目录中的项目,您应该在那里看到备份目录,如果您移动到该目录,您将看到包含您在脚本中提供的文件名的子文件夹。该子目录是Git存储库的克隆。

通过克隆我们的远程Git存储库,我们现在可以继续安装Coscmd,我们可以使用它将存储库备份到对象存储中。

安装Coscmd

  1. 检查是否装载 Python,若没有安装,具体参考 Python 安装与配置
  2. 检查是否装载最新版本 pip,若没有安装,请前往 PyPA pip 文档 按照教程安装。
  3. 进入 Terminal 开始 pip 安装,执行命令如下:
pip install coscmd

安装成功后,用户可以通过 pip -vpip --version 命令查看当前版本信息。

配置Coscmd

要将此备份上传到我们的腾讯云COS,我们将使用coscmd工具。COSCMD 工具在使用前需要进行参数配置。用户可以通过如下命令来配置:

coscmd config -a <secret_id> -s <secret_key> -b <bucket> -r <region> [-m <max_thread>] [-p <parts_size>]

上述示例中使用"<>"的字段为必选参数,使用"[]"的字段为可选参数。其中:

名称

描述

有效值

secret_id

必选参数,APPID对应的密钥ID可从COS控制台左侧栏【密钥管理】或云API密钥控制台获取

字符串

secret_key

必选参数,APPID对应的密钥Key可从COS控制台左侧栏【密钥管理】或云API密钥控制台获取

字符串

bucket

必选参数,指定的存储桶名称,bucket的命名规则为{name}-{appid} ,参考创建存储桶

字符串

region

必选参数,存储桶所在地域。参考可用地域

字符串

max_thread

可选参数,多线程上传时的最大线程数(默认为5),有效值:1~10

数字

parts_size

可选参数,分块上传的单块大小(单位为MB,默认为1 MB),有效值:1~10

那么我的命令是:

coscmd config -a AK***********************La -s B*********************oG -b t*****eb -r ap-chengdu
​

我们将首先测试我们的coscmd配置并尝试访问我们的备份空间(在本教程中我们的空间被命名为mysql-backup-demo):

$ coscmd list -a
​

您应该看到输出你cos文件列表:

Starting new HTTPS connection (1): q**************.cos.ap-shanghai.myqcloud.com
   Kubernetes/                                   DIR
   Tencent-CIS/                                  DIR
   TencentDB/                                    DIR
​

此输出表明连接成功,coscmd可以将对象传输到腾讯云COS

将Git存储库备份到对象存储中

安装和配置了所有工具后,我们现在将创建一个脚本,该脚本将压缩本地存储库并将其推送到腾讯云 COS。

从我们的主目录中,调用我们的脚本movetoCOSs.sh并在nano内打开它。

$ cd ~
$ nano movetoCOSs.sh

我们将编写如下脚本。

                                   movetoCOSs.sh
#!/bin/sh
​
tar -zcvf archivedemoproject.tar.gz /repos/demoprojectlocal.git
coscmd upload archivedemoproject.tar.gz  

我们现在使用tar来压缩Git存储库,然后再将其发送到COS。在tar命令中,我们指定了四个标志:

  • z 使用gzip方法压缩
  • c 创建一个新文件而不是使用现有文件
  • v 表示我们对包含在压缩文件中的文件的详细信息
  • f 使用下一个字符串中定义的名称命名生成的文件

在标志之后,我们在这些情况下,为压缩文件命名为archivedemoproject.tar.gz。我们还提供了要压缩的目录的名称/repos/demoprojectlocal.git

然后执行Coscmd upload脚本以发送archivedemoproject.tar.gz到我们的目标COS。

在您可能常用于Coscmd的命令中,upload命令将文件发送到COSs。 其他可能有用的命令包括从COS下载文件的download命令,您可以通过执行没有选项的Coscmd来获取Coscmd接受的所有命令的列表。

要将备份复制到COS中,我们将执行该脚本。

$ sh movetoCOSs.sh

您将看到以下输出:

demoprojectlocal.git/
...demoprojectlocal.git/packed-refs
100%|█████████████████████████████████████████████████████████████████████████████████████████████████| 15.0/15.0 [00:00<00:00, 55.1KB/s]

您可以通过运行以下命令来检查进程是否正常工作:

$ coscmd list -a

您将看到以下输出,表明该文件位于您的COS中。

...
archivedemoproject.tar.gz                                     15      2018-08-10 16:11:17

我们现在已成功将Git存储库备份到腾讯云 COS中。

结论

为确保在需要时可以快速恢复代码,维护备份非常重要。在本教程中,我们介绍了如何使用Git在Coscmd客户端和shell脚本将远程Git存储库备份到腾讯云 COS。这只是数十种可能情况的其中一种,您可以使用COSs来帮助您实现深度恢复数据。如果您在生产环境使用,我还是建议您直接使用腾讯Git代码托管,为开发者提供基于 Git 的在线代码托管工具,包含代码提交/存储/下载/复刻/分支/历史/比对/合并等功能。可一站式完成对代码及代码质量管理,项目及项目人员管理,大大提升研发效率。 更多Linux教程请前往腾讯云+社区学习更多知识。


参考文献:《How To Back Up Your Git Repository To COSs 》

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏smy

gulp rev manifest 添加目录前缀

gulp-rev 生成的manifest默认为: "index.css": "index.css?v=04aff97a7b",   为避免同名文件覆盖版本号,对...

36260
来自专栏企鹅号快讯

Linux系统下常用的数据备份方法

Linux作为网络操作系统,在服务器方面的应用越来越广泛。作为专门的网络服务器,一个重要功能就是对服务器数据进行备份,以确保数据的安全。本文将介绍在Linux系...

24480
来自专栏weixuqin 的专栏

Mac下安装 MongoDB

39550
来自专栏IMWeb前端团队

whistle工具全程入门

接触过前后端开发的同学应该都了解网络请求代理工具fiddler(mac下面常用的是Charles),可以用来拦截分析请求、包装请求、本地调试和移动端代理开发调试...

51360
来自专栏雪地二货笔记库

nodejs学习笔记(1)-安装配置和helloworld

关于nodejs的概念,查了查官网和博客,说他不是一门语言也不是库也不是框架,是一个js的运行环境。 这个概念有些模糊,运行环境这个词让我有些不明所以,又往后查...

17030
来自专栏张戈的专栏

解决网站404页面返回200状态码问题

好久没打理博客,突然收到 CDN 流量预警,发现平均每天 40G 流量消耗!what?就现在这个访问量,不存在的。看了下 CDN 日志发现有小人一直在请求博客页...

39430
来自专栏游戏杂谈

Windows环境下EditPlus运行Perl程序

在linux/unix环境下使用perl当然很方便了,常用的Vim就能搞定。但毕竟工作的机器使用的是Windows,又不想嫌麻烦去安装虚拟机(机器又会变慢),所...

18940
来自专栏开源优测

[接口测试_B] 02 Pytest的简单示例

Pytest是什么 Pytest是Python的一个测试工具,可以用于所有类型和级别的软件测试。Pytest是一个可以自动查找到你编写的用例并运行后输出结果的测...

33240
来自专栏SDNLAB

数据中心网络虚拟化 配置管理技术

在构建虚拟网络时,管理员需要进行大量的配置工作,例如端口的ip地址和VXLAN配置等等。显然,没有人愿意在系统每次启动时都将繁琐的配置工作重复一遍,所以将配置信...

38240
来自专栏老马寒门IT

Node入门教程(12)第十章:Node的HTTP模块

Ryan Dahl开发node的初衷就是:把Nginx非阻塞IO功能和一个高度封装的WEB服务器结合在一起的东东。所以Node初衷就是为了高性能的Web服务器去...

32060

扫码关注云+社区

领取腾讯云代金券