Ubuntu服务器搭建git仓库

本文参考网上多篇资料并经过多次搭建而总结的经验,实现以下功能:

1.在ubuntu上搭建私人git仓库并配置

2.用shell脚本自动把git仓库里面的代码更新到目标目录

3.在webstorm上如何使用

搭建时注意语句前用户的不同

克隆和上传仓库时可能会出现的路径不识别,本人在多台机器上测试,同个git仓库下,有些机器要输入绝对路径,有些机器要输入相对路径(即只输入仓库名),有些机器需要在Git Bash面板才能克隆和下载,目前问题仍未解决,欢迎大家评论提供思路

一、安装配置git

1. 安装gitopenssh

[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的成员,也可以编写对仓库的权限 :writablereadonly。这里设置权限,可以建立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

[email protected]  [email protected]()  [email protected]()

公钥文件以.pub结尾

 

操作完需要提交并pushgit服务器

[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 检出仓库

Ubuntu服务器搭建git仓库

 

Git Repository URL:[email protected]项目名称
Parent Directory:本地要存放地址的父目录
Directory Name:项目名称

Ubuntu服务器搭建git仓库

 

2.使用git

创建本地仓库

 Ubuntu服务器搭建git仓库

本地编写你的代码,之后addcommit然后直接push

 Ubuntu服务器搭建git仓库

 Ubuntu服务器搭建git仓库

 Ubuntu服务器搭建git仓库

 Ubuntu服务器搭建git仓库

 

 

 

5.参考资料

http://blog.jobbole.com/78960/ 推荐!手把手教你使用Git

 

搭建时几个网站配合看可能更好,操作系统可能缺包没更新什么的问题百度真的可以解决

http://blog.chinaunix.net/uid-20620288-id-3152615.html Ubuntu下git服务器的搭建

http://blog.csdn.net/yuan892173701/article/details/7775002/ ubuntu12.04搭建git服务器

https://www.haijd.net/article/archives/663/ 小组级git服务器搭建

 

http://blog.csdn.net/wsyw126/article/details/52167147 服务器自动部署项目之GitHooks神器

 

http://www.tuicool.com/articles/b2QNvq使用webstorm操作git

http://www.jianshu.com/p/4e2cb06cf3e4 如何在WebStorm上使用git