使用git在服务器上部署git仓库并实现提交代码时同步代码到生产环境

最近由于需要对正在运行的系统进行新功能添加,本来是可以通过github进行代码维护,但是由于这个项目涉及一些问题,目前还不能开源,所以只能是手动覆盖bug文件,生产环境上的代码反而是最新的了。

之前有个思路,就是将git仓库部署到生产环境所在的服务器中,今天做了一下尝试,效果还不错,特意再次做出总结。具体实现的目标就是:

使用git在服务器上部署git仓库并实现提交代码时同步代码到生产环境,参考git基本操作.废话少说,进入正题。

首先,需要在服务器上安装git,这里就不再罗嗦,不会装的,自行百度。

以下代码命令和代码实例中说明一下几点:

  • 所有服务器上的操作,为了避免遇到权限的问题,是直接进入root超级用户下的操作。
  • 创建的项目名为my_object。
  • 在服务器上,我选择将仓库创建在/var/下,生产环境项目代码放在/www/wwwroot/my_object/。阅读者可以自行更改,但是需要记住更改后的路径。
  • 为了隐私,实例的服务器ip用127.0.0.1代替,用户用gits代替。

第一步:在服务器上创建git仓库

我选择在/var/下创建:

mkdir git  && cd git
mkdir my_object.git && cd my_object.git
git init --bare 

--bare的意思是,该文件夹是我们的代码仓库,它将不会放源代码而只是做版本控制。

注:my_object.git 可以改成你自己的名字

第二步:创建钩子

将会使用post-receive钩子,更多相关的信息可以参考官方文档。

ls 

可以看到hooks已创建,而且里面也有各种钩子的样例。

 

 

 

第三步:创建我们自己的post-receive

cd hooks  
vim post-receive  
 
//这个位置 用 vim创建文件也可以,你们也可以用宝塔之类的创建。我是用宝塔创建的 

post-receive文件中加入以下需要同步的语句

#!/bin/sh
git --work-tree=/www/wwwroot/my_object --git-dir=/var/git/my_object.git checkout -f

注:/www/wwwroot/my_object 是你想同步到你服务器哪个目录,/var/git/my_object.git 则是你的仓库地址 两个地址都可以你自定义。

编辑完成之后保存。

将仓库文件夹也要设置为gits 所有然后gits拥有读取写入的权限即可 否则会报错误/var/git/my_object.git

注:gits用户创建将在下文中说道。

 

第四步:创建gits推送用户并且设置密码

服务器上创建 gits用户

adduser gits

然后设置密码 (然后输入密码回车,输入确认密码回车即可)

passwd gits

密码输入两次后提示设置密码成功

第五步:获取你本地的ssh-rsa(如果想每次推送都输入gits 密码的可忽略这一步)

1、配置一个你本地仓库的全局的用户名

#配置一个本地git的用户名 
git config --global user.name "xxx"

2、配置该账户的邮箱地址

#配置本地用户的邮箱地址 
git config --global user.email "xxx@qq.com" 

3、然后在本地生产ssh公钥

#邮箱就是你上面设置的那个邮箱地址
ssh-keygen -t rsa -C ###@qq.com 

注:如果windows 系统提示ssh-keygen不是内部或者外部命令的话可参考以下方法:

(1)找到:Git/usr/bin目录下的ssh-keygen.exe(一般在安装 Git 的这个目录)

(2)配置环境变量:我的电脑属性-->高级系统设置-->环境变量-->系统变量,找到Path变量,进行编辑,加到最后,输入分号,粘贴复制的ssh-keygen所在的路径,保存;


4、查看公钥

linux系统命令:

cat ~/.ssh/id_rsa.pub

window系统则需要去C:/Users/11/.ssh/id_rsa.pub 打开里面就是公钥

注:11是我当前电脑的用户名。具体的用户名看你的电脑系统一般默认都是administrator

 

第六步:把你本地的ssh公钥设置到服务器仓库(如果想每次推送都输入gits 密码的可忽略这一步)

1、切到服务器gits目录下

cd /home/gits

2、创建.ssh目录

mkdir .ssh
cd .ssh

3、然后创建authorized_keys文件 用宝塔创建也可以 在里面保存你刚才获取的本地ssh公钥 一行一个

4、设置.ssh 和 authorized_keys的所有者为gits

linux命令:

cd ../
#注:加-R 是修改文件夹下所有目录和文件的所有者为gits .ssh 是目录名
chown -R gits:gits .ssh

第七步:设置仓库目录权限

将git仓库目录(/www/wwwroot/my_object)设成可读写的(777): (这一步想当重要,必须是777,否则将无法写入文件)

设置文件夹权限的命令如下:

 

cd /www/wwwroot/my_object
chmod 777 -R * 

 

如果生产环境项目所在目录/www/wwwroot/my_object/不存在,要记得创建,同时让其的权限成为任何人都可读写!

mkdir /www/wwwroot/my_object/ cd /www/wwwroot/my_object/ && chmod 777 -R * 

服务器上的仓库和同步钩子配置到此完毕,下面需要我们在本地编写项目并上传至服务器仓库。

第八步:本地项目推送

一般情况是你已经有了自己的git项目了,那么只需要添加仓库地址就行了。

git remote add origin ssh://gits@127.0.0.1:22/var/git/my_object.git

注:gits 为git服务端ssh登录用户名,127.0.0.1为git服务端地址 22位ssh的登录端口 , /var/git/my_object.git 为git服务端项目仓库路径

下面就是一顿行云流水的操作啦

#将文件加入本地缓存区 
git add --all
git commit -m "备注" 
#推送到git服务端 加-f则进行覆盖 不加则不覆盖
git push -u origin master -f
#如果端口和地址访问正常的话。应该会提示让你输入密码。你就输入上面设置的gits的密码即可开始同步
#如果你目录权限和ssh公钥都配置正确的话 第一次推送只需要确认一下改服务器ip是否可以推送即可如果还是需要输入密码那就是目录权限或者ssh公钥的问题了

扩展知识:

1、多仓库同时推送

(1)添加第二个远程地址时使用以下命令:

git remote set-url --add origin git@github.com:morethink/programming.git

(2)查看远程分支:

git remote -v
#会显示如下信息
#origin  git@git.coding.net:morethink/programming.git (fetch)
#origin  git@git.coding.net:morethink/programming.git (push)
#origin  hexo@MyHost2:/var/repo/gitbook.git (push)

2、删除远程分支

git remote add origin

3、查看当前本地git仓库 状态

git status

4、提示出错信息:fatal: remote origin already exists.

解决办法如下:

(1)先删除远程分支信息

git remote rm origin

(2)重新添加远程分支

git remote add origin git@github.com:djqiang/gitdemo.git

 

好了 暂且写到这里,如果还是有问题的话 可以加我qq或者微信交流

 

posted @ 2021-04-08 16:06  浅笑19  阅读(1299)  评论(0编辑  收藏  举报