Ubuntu下搭建Git服务器,并同步部署到服务器上

一、安装git服务器所需软件

终端输入以下命令:

lzn@lzn-ThinkPad-E420:~$ sudo apt-get install git-core openssh-server openssh-client  python-setuptools  

lzn@lzn-ThinkPad-E420:~$ sudo apt-get install git-core openssh-server openssh-client  python-setuptools

git-core: git核心软件;

openssh-server和openssh-client:git通过ssh协议在服务器与客户端之间进行数据传输;

python-setuptools:gitosis依赖;

接下来准备安装gitosis

安装gitosis之前需要初始化服务器的git用户信息,这个随便填。

lzn@lzn-ThinkPad-E420:~$ git config --global user.name "myname"     

lzn@lzn-ThinkPad-E420:~$ git config --global user.email "******@gmail.com"  

lzn@lzn-ThinkPad-E420:~$ git config --global user.name "myname" 

lzn@lzn-ThinkPad-E420:~$ git config --global user.email "******@gmail.com"

安装gitosis.gitosis主要是给用户授权.通过以下命令获取gitosis版本文件

ubuntu:~$ git clone https://github.com/res0nat0r/gitosis.git  

ubuntu:~$ git clone https://github.com/res0nat0r/gitosis.git

注意:中间有两个是数字零

获取gitosis文件后,进入到文件目录下面

ubuntu:~$ cd gitosis/    

ubuntu:~$ cd gitosis/ 

接着使用python命令安装目录下的setup.py的python脚本进行安装

ubuntu:~/gitosis$ sudo python setup.py install   

ubuntu:~/gitosis$ sudo python setup.py install

到这里,整个安装步骤就完成了,下面就开始对git进行一些基本的配置。

二、创建git管理员账户、配置git

创建一个账户(git)作为git服务器的管理员,可以管理其他用户的项目权限。

ubuntu:~/gitosis$ sudo useradd -m git    

ubuntu:~/gitosis$ sudo passwd git   

ubuntu:~/gitosis$ sudo useradd -m git 

ubuntu:~/gitosis$ sudo passwd git

然后再/home目录下创建一个项目仓库存储点,并设置只有git用户拥有所有权限,其他用户没有任何权限

ubuntu:/tmp/gitosis$ sudo mkdir /home/gitrepository    

ubuntu:/tmp/gitosis$ sudo chown git:git /home/gitrepository/    

ubuntu:/tmp/gitosis$ sudo chmod 700 /home/gitrepository/   

ubuntu:/tmp/gitosis$ sudo mkdir /home/gitrepository 

ubuntu:/tmp/gitosis$ sudo chown git:git /home/gitrepository/ 

ubuntu:/tmp/gitosis$ sudo chmod 700 /home/gitrepository/

由于gitosis默认状态下会将仓库放在用户的repositories目录下,例如git用户的仓库地址默认在

/home/git/repositories/目录下,这里我们需要创建一个链接映射。让他指向我们前面创建的专门用于存放项目的仓库目录/home/gitrepository。

lzn@lzn-ThinkPad-E420:~$ su - git  

git@lzn-ThinkPad-E420:~$ sudo ln -s /home/gitrepository /home/git/repositories    

lzn@lzn-ThinkPad-E420:~$ su - git

git@lzn-ThinkPad-E420:~$ sudo ln -s /home/gitrepository /home/git/repositories 

这里我将在服务器端生成ssh公钥,如果想在其他机器上管理也可以在其他机器上生成一个ssh的公钥。

git@lzn-ThinkPad-E420:~$ ssh-keygen -t rsa    

git@lzn-ThinkPad-E420:~$ ssh-keygen -t rsa 

这里会提示输入密码,我们不输入直接回车即可。

然后用刚生成公钥id_rsa.pub来对gitosis进行初始化。

git@lzn-ThinkPad-E420:~$ gitosis-init < ~/.ssh/id_rsa.pub  

git@lzn-ThinkPad-E420:~$ gitosis-init < ~/.ssh/id_rsa.pub


出现如上信息说明gitosis已经初始化成功。

gitosis主要是通过gitosis-admin.git仓库来管理一些配置文件的,如用户权限的管理。这里我们需要对其中的一

个post-update文件添加可执行的权限。

sudo chmod 755 /home/gitrepository/gitosis-admin.git/hooks/post-update  

sudo chmod 755 /home/gitrepository/gitosis-admin.git/hooks/post-update

三、服务器上创建项目仓库

使用git账户在服务器上创建一个目录(mytestproject.git)并初始化成git项目仓库。

ubuntu:/home/git$ su - git    

ubuntu:/home/git$ cd /home/gitrepository    

ubuntu:/home/git/repositories$ mkdir mytestproject.git    

ubuntu:/home/git/repositories$ cd mytestproject.git    

ubuntu:/home/gitrepositories/mytestproject$ git init --bare   

新建的这个仓库暂时还是空的,不能被客户端clone,还需要对gitosis进行一些配置操作。

四、使用gitosis管理用户操作项目的权限

首先需要在前面生成ssh公钥(用来初始化gitosis)的机器上将gitosis-admin.git的仓库clone下来。

在客户端机器上新建一个目录用于存放gitosis-admin.git仓库

ubuntu:~$ mkdir gitadmin    

ubuntu:~$ cd gitadmin/    

ubuntu:~/gitadmin$ git clone git@192.168.1.106:repositories/gitosis-admin.git   

    ubuntu:~$ mkdir gitadmin 

    ubuntu:~$ cd gitadmin/ 

    ubuntu:~/gitadmin$ git clone git@192.168.1.106:repositories/gitosis-admin.git

clone正确会显示一下信息


clone下来会有一个gitosis.conf的配置文件和一个keydir的目录。gitosis.conf用于配置用户的权限信息,

keydir主要用户存放ssh公钥文件(一般以“用户名.pub”命名,gitosis.conf配置文件中需使用相同用户名),用

于认证请求的客户端机器。

现在让需要授权的用户使用前面的方式各自在其自己的机器上生成相应的ssh公钥文件,管理员把他们分别按用户名

命名好,复制到keydir目录下。

ubuntu:~$ cp /home/aaaaa/Desktop/zhangsan.pub /home/aaaaa/gitadmin/gitosis-admin/keydir/    

ubuntu:~$ cp /home/aaaaa/Desktop/lisi.pub /home/aaaaa/gitadmin/gitosis-admin/keydir/    

    ubuntu:~$ cp /home/aaaaa/Desktop/zhangsan.pub /home/aaaaa/gitadmin/gitosis-admin/keydir/ 

    ubuntu:~$ cp /home/aaaaa/Desktop/lisi.pub /home/aaaaa/gitadmin/gitosis-admin/keydir/ 

继续编辑gitosis.conf文件

[gitosis]

[group gitosis-admin]

####管理员组

members = charn@ubuntu

####管理员用户名,需要在keydir目录下找到相应的.pub文件,多个可用空格隔开(

下同)

writable = gitosis-admin

####可写的项目仓库名,多个可用空格隔开(下同)

[group testwrite]

####可写权限组

members =

zhangsan####组用户

writable = mytestproject

####可写的项目仓库名

[group testread]####只读权限组members =lisi####组用户readonly= mytestproject####只读项目仓库名

因为这些配置的修改只是在本地修改的,还需要推送到服务器中才能生效。

ubuntu:~/gitadmin/gitosis-admin$ git add .    

ubuntu:~/gitadmin/gitosis-admin$ git commit -am "add a user permission"    

ubuntu:~/gitadmin/gitosis-admin$ git push origin master    

    ubuntu:~/gitadmin/gitosis-admin$ git add . 

    ubuntu:~/gitadmin/gitosis-admin$ git commit -am "add a user permission" 

    ubuntu:~/gitadmin/gitosis-admin$ git push origin master 

推送成功会显示下面提示信息


新增的用户不能立即生效,这时候需要重新启动一下sshd服务

ubuntu:~/gitadmin/gitosis-admin$ sudo /etc/init.d/ssh restart  

ubuntu:~/gitadmin/gitosis-admin$ sudo /etc/init.d/ssh restart

现在,服务端的git就已经安装和配置完成了,接下来就需要有权限的组成员在各自的机器上clone服务器上的相应

项目仓库进行相应的工作了。

五、客户端(linux)使用git

在终端执行如下命令:

$ mkdir testgit    

$ cd testgit    

$ git init    

$ echo "this is a test text file,will push to server"> hello.txt    

$ git add .    

$ git commit -am "init a base version,add a first file for push to server"    

$ git remote add origin git@serverip:repositories/mytestproject.git    

$ git push origin master   

    $ mkdir testgit 

    $ cd testgit 

    $ git init 

    $ echo "this is a test text file,will push to server" > hello.txt 

    $ git add . 

    $ git commit -am "init a base version,add a first file for push to server" 

    $ git remote add origin git@serverip:repositories/mytestproject.git 

    $ git push origin master

这样服务端就创建好了一个mytestproject.git的仓库的基础版本了,现在其他组员只要从服务端进行clone就可以

了。

添加了相关权限的用户可以执行如下命令:

$ git clone git@serverip:repositories/mytestproject.git    

    $ git clone git@serverip:repositories/mytestproject.git 

就可以把项目clone到本地仓库了。

下面进行简单的修改和提交操作

$ cd mytestproject    

$ echo "this is another text file created by other">another.txt    

$ git add .    

$ git commit -am "add a another file by other"    

$ git push origin master    

六、通过hooks部署代码到服务器

进入项目

# cd /home/www/project.git/hooks

# vim post-receive

#!/bin/sh

#PATH=$PATH:/usr/local/python27/binGIT_WORK_TREE=/home/www/newproject git checkout -f

cd/home/www/newproject && make html >/dev/null 2>&1

cd/home/www/newproject && make html >/dev/null 2>&1

然后将post-receive改为可执行,更改文件所有者

chmod +x post-receive

chown git:git -R /home/www/newproject

感谢http://blog.csdn.net/iron_lzn/article/details/53009733

感谢https://www.jianshu.com/p/5c7ce1b02100

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,445评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,889评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,047评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,760评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,745评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,638评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,011评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,669评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,923评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,655评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,740评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,406评论 4 320
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,995评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,961评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,023评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,483评论 2 342