我喜欢 github,我如今的我的代码所有是托管在上面了,可是一些公司或者某些项目不适合放入github中,你但愿能有一个彻底私有的仓库,若是你有一台服务器,这显然是很容易办到的事。git
下面简单的描述我在某个项目中布署的一个git服务,而且本地提交更新后,服务器将自动更新代码到在线代码的仓库。github
root 用户ssh登陆服务器,建立一个新用户用来给git登陆及其操做,好比这里我建立一个名为“git”的用户:shell
$ sudo add user git
进入到 /home/git 文件夹中,查看是否有 .ssh/ 目录, 如没有:vim
$ mkdir .ssh
进入 /home/git/.ssh 文件夹中,建立文件 authorized_keys服务器
等待ssh
进入 ~/.ssh/ 目录,查看是否有 id_rsa.pub 文件,如没有:post
$ ssh-keygen
一路回车,完成后,即可发现 ~/.ssh/ 目录中有 id_rsa.pub, 复制其内容,粘贴到上面操做服务器的 authorized_keys 文件中测试
测试是否密钥登陆成功google
$ ssh git@yourserverip
进入 /opt/git 目录, 如没有,建立之
创建仓库文件夹,好比:
path:/opt/git $ mkdir gitdemo
将gitdemo用户组设置为当前用户git
初始化为远程仓库
$ git init --bare
上面的步骤已经完成了git远程仓库的建立,此时你只要将你本地的git代码仓库 git remote add git@yourserverip:/opt/git/gitdemo
,即可提交与更新代码了。
好比我机器上的开发目录为:~/www/gitdemodev, 进行下面操做:
$ cd ~/www/gitdemodev $ git init #建一个文件,写点东西进去 $ touch README | echo 'hello git' > READEME $ git add README $ git remote add origin git@yourserverip:/opt/git/gitdemo $ git commit -m 'first commit' $ git push origin master
如今你已经本地的代码成功的提交到了远程仓库中,只需在你团队成员电脑上做相同操做,即可利用git协同开发了,注意把各自电脑的 id_rsa.pub 内容复制进服务器的 authorized_keys 文件中。
假设你的项目也是跑在此台服务器上,那自动布署代码就很简单了,好比你的在线服务代码在 /var/www/demo 文件夹中。
/var/www/demo也要有写权限
你先初始化代码库:
$ git clone /opt/git/gitdemo /var/www/demo
而后你能够经过 git pull
来更新代码。
固然这样是手动了,我想要的是本地提交更新后,服务器能自动的 git pull代码到最新,因而咱们就要借助 git hook
了。
进入到 /opt/git/gitdemo 文件夹中,会发现 .git/hook 文件夹在里面,进入到 hook 中,里面有不少的 sample 脚本,这里咱们只须要用到 post-update。
$ mv post-update.sample post-update $ vim post-update
能够看到里面其实就是一些shell脚本,你要作的就是把 git pull写进去。当用户提交后,便会调用post-update脚本的。
好比我在服务器的代码库更新后,要求对应的服务代码也要更新(进行pull操做),
则在bare仓库的hooks中的post-receive添加以下内容便可
#!/bin/sh unset $(git rev-parse --local-env-vars) cd WEB_DIR git pull
这些脚本显然是能够作不少事的,只要你想获得,要了解各脚本什么时候调用,google吧。
注:服务器中与git用户有关的文件夹及文件,请:
$ chown -Rh git:git /your/git/dirs