Git:本地部署代码到服务器(GitHub服务器 或 局域网搭建
【前言】
有时候不想放代码到GitHub或码云或其他的git管理平台,想要把代码放到本地或者局域网服务器或者自个的远程服务器上。
所以要做的工作是直接将本地代码部署到局域网服务器或者远程服务器上。
scp命令在项目一开始可能还凑合着能用,或者用FTP也不错,但是Git才是王道啊。
注:以下的服务器是指局域网服务器或者远程服务器。
【过程】
1、很多人用的GitHub是这么回事:
流程:本地仓库 <=> GitHub远程仓库
2、那么部署到服务器,就在服务器上搞个远程仓库就得了:
流程:本地 <=> 服务器远程仓库
基本过程是:将本地/var/www目录下的项目目录提交到本地仓库(把服务器代码同步到本地上l),本地仓库提交更改到服务器仓库(把新的代码提交上去),服务器仓库checkout更改(用新的代码覆盖旧的代码),将服务器仓库目录的代码复制到/var/www(覆盖原来的代码,完成新代码的部署)。
架构图感谢:
参考文章:Love满天星 的《使用git做服务器端代码的部署》http://www.cnblogs.com/shaohuixia/p/5503521.html
1. 服务器
首先当然是装好git啦,apt-get install git就行了。
(1) 添加一个专门用来部署代码的用户
为了安全起见,新建一个专门用于代码部署的无特权用户。我用git作为用户名,输入如下命令后,会提示设置密码:
useradd -m git
passwd git 设置该用户的密码,也可根据喜好配置成免密码登陆
设置密码后还会提示输入一些其他信息,不用管,enter过去就好。
有些文章(http://www.cnblogs.com/shaohuixia/p/5503521.html)说“也可根据喜好配置成免密码登陆”,我不太同意这个说法。一开始我就将密码设为git,然后一觉醒来阿里云报告说在深圳、欧洲有人以git用户身份登录了我的服务器,很不安全啊。毕竟是服务器,不要被别人胡乱弄点什么东西上去是吧,所以还是得认真设个密码。
(2) 新建一个目录作为接收代码的仓库
我在/home目录下,新建一个叫git_repository的目录:
cd home
mkdir git_repository
然后把这个目录的所有者和所在用户组都改成git用户:
chown git:git git_repository
(也可以用chown和chgrp修改)
(3) 当当当,变身仓库
终于用到git命令了。进入刚刚新建的目录,初始化为git仓库:
cd git_repository
git init
然后,让仓库接收代码提交:(照做,我也不太懂)
git config receive.denyCurrentBranch ignore
(4). 【重要】让仓库接受代码提交
git config receive.denyCurrentBranch ignore
[可选] git config core.worktree ~/www
[可选] git config --bool receive.denyNonFastForwards false #禁止强制推送
至此,一个空的git仓库就在服务器上建好了,仓库的地址为:
ssh://deployuser@ipaddress/var/wwwroot/www/.git
2. 本地
没装Git的赶紧装上。
(1) 将项目目录变为Git仓库
git init
(2) 提交更改
git commit -a -m "init commit"
-a和-m都是commit命令的参数。-a表示全部;-m表示这次提交的描述信息,内容一般比较精简,直接在后面用双引号附上描述信息表明本次修改的作用即可。
(3) 可选:提交更改前的一点技巧
再次进行提交时,可以查看更改的情况:
git status
然后会列出哪些文件已被跟踪(track),哪些文件还未被跟踪。被跟踪的文件会显示做了什么修改(change),例如被更改(modified)、删除(deleted)。未被跟踪的文件,可以视情况进行跟踪,然后才会被提交到仓库。下面的命令可以将文件index.html添加到跟踪列表:
git add index.html
用git status再次查看更改情况,会有绿色提示index.html是即将提交的新文件。
(4) 添加远程主机
命令格式:
git remote add <主机名> <网址>
例如:git remote add server0 git@192.168.1.110:/home/git_repository/.git
其中,server0是自定的主机名,git是上文提到的专门用于提交代码的服务器用户,192.168.1.110是服务器IP,/home/git_repository就是服务器仓库目录。
(5) 终于要提交本地代码到服务器了
命令格式:
git push server0 master
其中,server0就是刚刚定义的主机名,master是Git分支名。分支是Git进行版本管理的概念,这里不管那么多,没别的分支,用master这个分支就好。
输入push命令之后,还需要输入git用户的密码才能完成push。
3. 服务器
又回到服务器这边。
(1) 更新仓库状态并检出更改
git update-server-info
git checkout -f
duang~仓库里的代码就更新好了。
(2) 复制代码到实际项目目录
服务器上代码仓库所在目录与实际项目目录不同,还得复制过去。笨拙的办法,求轻喷。
cd /var/www
mv MyWebsite MyWebsite.bak #将实际项目目录改名
cp -r /home/git_repository /var/www #复制
mv git_repository MyWebsite #改名