搭建自己的中转git服务器

Crontab+Git

Posted by Kingtous on April 1, 2019

背景

有的时候将个人博客push上github仓库,1-2kb/s的速度看着脑壳疼,怎么办呢?

要是有个连接Github速度快的云服务器帮助我们推送则就很爽了.

开始操作!

操作流程

  • 在服务器建立自己的中转git仓库
  • 在本地副本中链接我们服务器的中转git仓库
  • 在中转git仓库链接我们的github仓库
  • 在我们的服务器上设置自动推送,让Linux系统能够自动推送我们的commit
  • (可选的懒人项)给本地配置推送脚本,一条命令解决推送问题

Step.1 在服务器建立自己的中转git仓库

  • 设置git账户以及仓库(以Ubuntu为例)
    • 我设置的账户名为”git”
1
2
3
4
5
6
7
8
9
10
11
#添加用户git
useradd git
#给git设置密码
passwd git
#设置主目录
mkdir /home/git
chown -R /home/git git
#建立空仓库(仓库文件夹我取名为myBlog.git(注意这是文件夹) (我是用来管理博客的))
mkdir /home/git/myBlog.git
cd /home/git/myBlog.git
git --bare init

  • 让用户git信任我们本地,添加我们本地的SSH密钥
    • 如果还没有生成密钥,利用ssh-keygen生成
1
2
3
4
5
su git
mkdir ~/.ssh
touch ~/.ssh/id_rsa.pub
vim ~/.ssh/id_rsa.pub
#粘贴我们本地的SSH密钥进去,保存即可

Step.2 在本地副本中链接我们服务器的中转git仓库

  • 首先保证本地有一份完整的副本(即与github相同版本的文件)
  • 把这份副本传到中转git仓库中
1
git remote add server [email protected]服务器IP:/home/git/myBlog.git
  • 推送(注:在本地仓库中执行,不是服务器端)
1
2
3
git push server
#如果提示没有设置upstream,则用下面的命令
	git push orgin或者master server

Step.3 在中转git仓库链接我们的github仓库

  • 给git用户生成一个SSH密钥(也用ssh-keygen),在Github中添加
  • 把这份副本传到中转git仓库中
1
git remote add github (github提供的链接,注意是SSH链接)
  • 推送
1
git push github master

Step.4 在我们的服务器上设置自动推送,让Linux系统能够自动推送我们的commit

  • 新建上传脚本,保存(根据个人设置更改,至于取名的话我取名为updateBlog.sh)
1
2
cd /home/git/myBlog.git
git push github master
  • 给上传脚本赋予执行权限
1
chmod a+x updateBlog.sh
  • 利用Linux的Crontab命令(没有的话命令安装一下)
1
2
3
4
5
crontab -e
# 选择编辑器(选择你觉得简单的)
# 加入下面的命令,*/2即为2小时推送一次,使用命令行bash执行updateBlog.sh脚本
# 详细配置请百度Crontab命令参数设置
0 */2 * * * bash /home/git/script/updateBlog.sh

Step.5 (可选的懒人项)给本地配置推送脚本,一条命令解决推送问题

  • 编写自动上传脚本(我保存的文件名为updateBlogUsingServer.sh)
1
2
3
4
5
6
7
8
9
10
#加入push时间的支持
time=$(date "+%Y-%m-%d-%H:%M:%S")
#进入仓库根目录
cd /Users/kingtous/Kingtous.github.io-master
#添加更改(删除的话需要通过 git rm xxx)
git add *
#commit更改
git commit -m "Update At "$time
#向中转服务器push更改
git push server
  • 赋予执行权限
1
chmod a+x updateBlogUsingServer.sh

至此全部配置完成,下次我们对仓库做完更改后,直接执行updateBlogUsingServer.sh或者git push server,推送上我们的服务器后,服务器就可以自动在指定的时间周期内向Github推送我们的更改,岂不美哉?(比如这篇博客就是自动推送的(😁))