如何使用 S3 做为私有 Git 仓库

lhp000 2014-10-17

通常那些网站上的文件内容都是存储在一个git仓库里的.(对于非从事软件行业的人来说,可以把"git"理解为是一个可以让你以逻辑方式保存文件的所有历史变化内容的,用于版本控制的系统).当我要使用时,我需要把它放到我本地电脑上(而用额外的硬盘来做备份).

但是,假如我没有个人电脑但是又需要编辑或创建的话呢?显然,我需要从服务器上("云上")拷贝源文件.本篇内容简单描述关于我是怎么考虑在S3使用私有Git仓库的.我知道很多地方都有相关的内容,但是这是有用的内容值得再次提及

找到一个解决方案

其实我的第一想法是GitHub。这是一个为各种软件实现托管的社会协作网站。虽然它能起作用,但是如果我想保持内容是私人的话(像汇票等)我将不得不付费使用。公共的(免费的)没有多大意义:这是一个个人的博客网站,不是真正的协作。

接下来,我认为只是放一个git仓库在服务器上,我从Sonic.net访问,我的旧ISP,我一直有一个账户。这儿的问题有是shell账户我不一定需要总是可用的。我发现我不得不安装git本身表明他们不是真的希望我做这样的事情。在任何情况下,该帐户并不是真的意味着可靠和可用的备份。

然而我意识到:我有一个庞大而且廉价的地方来存储我的数据,那就是"S3",一个非常可靠的地方。唯一的难点就是我需要将我本地的GIT仓库内容导入到我的S3容器中。我google了一下发现Jgit和很多的写这个项目的博客文章。

注:我已经使用亚马逊的S3来存储我的网站,这是显而易见的。然而我怀疑这个可能适用于其他的支持Jgit的“云存储”或者你可以修改它来支持你的托管。

使用 S3 作为私有 Git 仓库

创建一个S3容器

首先你需要有一个AWS的账户以及一个S3的容器,比如我的站点初始名称是"r343l.com",我命名我的GIT仓库容器为"r343l.gitrepos"。S3的容器必须有一个全球唯一名称因此我的大部分容器都是以这样的前缀方式进行命名。

步骤如下:

  1. 用你的ASW账户登录。

  2. 进入ASW的管理控制台选择S3。

  3. 点击“创建”并设置一个名称,默认情况下该容器仅对你授权,请仔细检查。

设置本地凭证访问 S3

这个步骤是用来获取访问仓库的AWS访问账号和密码的。例如,我们使用"main"作为账号。如果我们将bucket分享给其他人,你可以创建一些规则,将这些访问权限授权给在bucket上的这些用户。但是我们假设的是做的最简单的方式。值得注意的是一旦你在本地机器上拥有了一个文件,你必须对待他们像SSH私有证书一样。

    1.在右上角的菜单 My Account / Console menu 中的下拉菜单获取安全证书

    2.在你的home文件夹下创建一个名为“.jgit_s3_public”的文件(我用的是Mac,不确定在windows下是否正确)。确保只有你是可读的  (访问权限是600)。在unix-ish系统中的命令是

touch ~/.jgit_s3_public; chmod 600 ~/.jgit_s3_public

      3.在AWS证书页面,向下滚动知道看到“Your access keys”。点击“Show”来获取密钥。像下面的例子一样,将账号和密钥拷贝到新创的文件中:

accesskey: [access ID for AWS]
secretkey: [secret key for AWS]
acl: private

安装Jgit

Download下载软件。我选择的是包含shell脚本的版本,它该版本包含了一个运行Jgit的脚本(一个javav应用程序)和其java的代码。该命令位于项目根目录的 "bin" 文件夹,其别名 "jgit" 命令。

创建一个git仓库并将其上传到S3!

我们假设你的bucket是foo.gitrepos,其存储了你所有的给个人git仓库。就我而言,我把我的网站主放到了那么,而另外一个使用则可能是在另一个网站托管的的博客文章。你知道为什么大家说在博客软件之外编辑吗,因为你的浏览器有可能崩溃。现在好了,比在博客软件之外编辑更好的是将这些文件保存到一个单独的地方,以防托管的博客丢失。例如下面的例子,我们假设你又一耳光tumblr.

cd ~/
mkdir myrants-tumblr
cd myrants-tumblr
... create some files
git init
git add *
git commit -m "my new files yay!"
git remote add s3 amazon-s3://[email protected]/projects/myrants-tumblr
jgit push s3 refs/heads/master  ### 注意:是jgit,不是git

现在在S3上你有自己的文件了!

从 S3 获取你的文件

当你在另外一台电脑上,并且非常想要获取到你自己的文件该怎么办呢?现在好了,你只要安装 JGit 并且像以前一样设置一下其客户端的证书就可以了。然后克隆下git仓库中的内容

jgit clone amazon-s3://[email protected]/projects/myrants-tumblr

然后你就可以根据需要编辑或者是增加文件了。把文件备份到S3就像之前PUSH的一样。需要注意的是,一旦在多个地方建立了本地仓库,在某些时候,是需要更新本地仓库代码的。用jgit的命令如下:

jgit fetch              ## gets updates from the S3 master
git merge s3/master

基本上,操作本地仓库时(添加,提交,合并)用git的本地命令,和S3 bucket交互时发送或者是接受数据则使用jgit

本文到此结束,希望本文对您有所帮助!

Git 的详细介绍:请点这里
Git 的下载地址:请点这里

相关推荐