Ubuntu服务器搭建git仓库
本文参考网上多篇资料并经过多次搭建而总结的经验,实现以下功能:
1.在ubuntu上搭建私人git仓库并配置
2.用shell脚本自动把git仓库里面的代码更新到目标目录
3.在webstorm上如何使用
搭建时注意语句前用户的不同
克隆和上传仓库时可能会出现的路径不识别,本人在多台机器上测试,同个git仓库下,有些机器要输入绝对路径,有些机器要输入相对路径(即只输入仓库名),有些机器需要在Git Bash面板才能克隆和下载,目前问题仍未解决,欢迎大家评论提供思路
一、安装配置git
1. 安装git和openssh
[email protected]:~$ sudo useradd -m git [email protected]:~$ sudo passwd git [email protected]:~$ sudo apt-get install git-core openssh-server openssh-client |
2. 创建git仓库
[email protected]:~$ sudo mkdir /home/git/repositories 让除了git以外的用户对此目录无任何权限: [email protected]:~$ sudo chown git:git /home/git/repositories [email protected]:~$ sudo chmod 755 /home/git/repositories |
二、安装配置gitosis
1. 初始化一下服务器的git用户,这一步其实是为了安装gitosis做准备。在任何一 台机器上使用git,第一次必须要初始化一下
先确定用户自己有没有mkdir的权限 [email protected]:~$ git config --global user.name “winhong” [email protected]:~$ git config --global user.email “[email protected]” |
2. 安装gitosis
[email protected]:~$ sudo apt-get install python-setuptools 在/home/git目录下建一个文件夹,管理git仓库的用户。 [email protected]:~$ cd tmp [email protected]:~/tmp$ git clone https://github.com/res0nat0r/gitosis.git [email protected]:~/tmp$ cd gitosis [email protected]:~/tmp/gitosis$ sudo python setup.py install |
3. 生成ssh公钥
[email protected]:~/tmp/gitosis$ ssh-****** -t rsa 默认回车,保存到当前用户的主目录下 [email protected]:~/tmp/gitosis$ cp /home/hl/.ssh/id_rsa.pub /home/hl/tmp/id_rsa.pub [email protected]:~/tmp$ sudo chmod a+r id_rsa.pub |
4. 让gitosis运行起来
[email protected]:~/tmp/gitosis$ sudo -H -u git gitosis-init < /home/hl/tmp/id_rsa.pub Initialized empty Git repository in /home/git/repositories/gitosis-admin.git/ Reinitialized existing Git repository in /home/git/repositories/gitosis-admin.git/ |
5. 添加可执行权限
[email protected]:~/home#cd /home/git/repositories/gitosis-admin.git/hooks [email protected]:~ /home/git/repositories/gitosis-admin.git/hooks# chomd 755 post-update |
三、git服务器配置和使用
1.gitosis-admin权限配置
gitosis-admin配置是通过git来实现的,得从git服务器的一个仓库克隆出来,搭建服务器时已经克隆出来
[email protected]:/gitwork/gitosis-admin$ls gitosis.conf keydir |
gitosis.conf文件和keydir文件夹
gitosi.conf文件主要的作用是管理员可以编写其他人的权限,可以编写对gitosis-admin的成员,也可以编写对仓库的权限 :writable和 readonly。这里设置权限,可以建立group设置。不添加成员不给提交项目
[gitosis]
[group gitosis-admin](默认别动) members = [email protected] writable = gitosis-admin
[group test](新建组名,随便写) member = [email protected] [email protected](例) [email protected](例) writable = trunk(仓库名) 项目一 项目二 |
keydir 文件夹是存放提交git服务器的用户的公钥,必须注意谁的公钥谁的名字的要求来存放,没有公钥不给提交项目
[email protected]:/gitwork/gitosis-admin/keydir$ ls |
公钥文件以.pub结尾
操作完需要提交并push到git服务器
[email protected]:/gitwork/gitosis-admin$git add . [email protected]:/gitwork/gitosis-admin$git commit -m “写注释” [email protected]:/gitwork/gitosis-admin$git push origin master |
在用户主目录下的.ssh目录,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。如果没有这两个文件,输入如下命令创建SSH Key。
ssh-****** -t rsa -C "[email protected]" |
如果没安装ssh,找到Git/usr/bin目录下的ssh-******.exe(如果找不到,可以在计算机全局搜索);我的电脑属性-->高级系统设置-->环境变量-->系统变量,找到Path变量,进行编辑,End到最后,输入分号,粘贴复制的ssh-******所在的路径,保存;重启cmd,执行ssh-******,成功!然后再执行一次上面的命令,目的是更改公钥标识字段
2.创建提交git仓库
Git裸仓库默认放在/home/git/repositories目录下,裸仓库没有工作区,所以看不到项目源码文件
[email protected]:~/repositories$ls gitosis-admin.git 项目一.git 项目二.git |
可以先直接在git服务器上创建一个空的裸仓库,用户在自己电脑上提交项目到仓库。如果用户本机是将仓库克隆下来或者不是第一次提交,就不需要再设置提交地址了,直接提交(重点:裸仓库名字末尾一定要带 .git )
远程服务器创建仓库操作: [email protected]:~/repositories$ cd /home/git/repositories [email protected]:~/repositories$ mkdir 项目三.git [email protected]:~/repositories$ cd 项目三.git [email protected]:~/repositories$ git init --bare |
用户本机提交项目操作: $git add . $git commit -m “写注释” $git remote add origin [email protected]服务器IP:/home/git/repositories/项目三.git $ git push origin master |
3.配置git仓库自动更新
在/git目录下新建一个文件夹,存放普通仓库,自动更新用户提交上来的项目源码,因为git仓库看不见源码很糟心,不可能每次手动拷贝出来。正式发布项目时再从这里拷贝出去
[email protected]:~$ ls gitosis repositories workspace |
gitosis文件夹有事没事别动
repositories文件夹专门放git仓库
workspace文件夹放普通仓库(名字随便起)
先提交一次项目到裸仓库后再克隆出普通仓库,配置裸仓库git hook,使用vim post-receive创建一个脚本,当你在本地仓库执行git push后就会触发post-receive
[email protected]:~/workspace$git clone /home/git/repositories/项目三.git [email protected]:~/repositories/项目三.git/hooks$vim post-receive |
post-receive里面的脚本: #!/bin/sh #判断是不是远端仓库
IS_BARE=$(git rev-parse --is-bare-repository) if [ -z "$IS_BARE" ]; then echo >&2 "fatal: post-receive: IS_NOT_BARE" exit 1 fi
#unset GIT_DIR #DeployPath="/home/git/workspace/项目三" export GIT_WORK_TREE=/home/git/workspace/项目三 export GIT_DIR=${GIT_WORK_TREE}/.git
echo "===============================================" cd ${GIT_WORK_TREE} echo "deploying the test web"
git add . -A && git stash git pull origin master
#git fetch origin #git reset --hard origin/master
time=`date` echo "web server pull at webserver at time: $time." echo "================================================" |
保存后赋予可执行权限 [email protected]:~/repositories/项目三.git/hooks$chmod +x post-receive |
解释
git fetch:相当于是从远程获取最新版本到本地,不会自动merge。
git pull:相当于是从远程获取最新版本并merge到本地。
pull实现相当于fetch后再用merge,来合并本地和远端的代码。
这里就有个问题,如果开发者在提交过程出现失误,使用git reset复位后,现在远端的代码版本低于web端的代码版本,再使用pull的时候就不能实现和开发者本地的代码的同步。所以这里使用fetch后,在强制使用reset实现web端的代码版本指针和git服务端的一致。
4.Git结合webstorm
使用前提是开发者本机安装好git,配置好用户名和邮箱信息
1.检出git仓库
在WebStorm中选择VCS -> Checkout form Version Control -> Git 检出仓库
Git Repository URL:[email protected]项目名称
Parent Directory:本地要存放地址的父目录
Directory Name:项目名称
2.使用git
创建本地仓库
本地编写你的代码,之后add,commit然后直接push
5.参考资料
http://blog.jobbole.com/78960/ 推荐!手把手教你使用Git
搭建时几个网站配合看可能更好,操作系统可能缺包没更新什么的问题百度真的可以解决
http://blog.chinaunix.net/uid-20620288-id-3152615.html Ubuntu下git服务器的搭建
http://blog.****.net/yuan892173701/article/details/7775002/ ubuntu12.04搭建git服务器
https://www.haijd.net/article/archives/663/ 小组级git服务器搭建
http://blog.****.net/wsyw126/article/details/52167147 服务器自动部署项目之GitHooks神器
http://www.tuicool.com/articles/b2QNvq使用webstorm操作git
http://www.jianshu.com/p/4e2cb06cf3e4 如何在WebStorm上使用git