git服务器搭建及使用手册

本文档详细介绍了如何在redhat5.5_x86_64系统上搭建git服务器,包括配置网络、安装git-core和gitosis、创建仓库、管理权限以及客户端操作。通过步骤式的指导,读者可以学会从设置硬件和软件需求,到生成ssh公钥、配置gitosis.conf文件,再到初始化项目和管理git仓库的一系列操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、git服务器的软、硬件需求

硬件需求

一台装有linuxredhat5.5_x86_64)的电脑,在公司局域网内有独立IP,并且保证小组每个人都能ping通;

软件需求:

git-core,gitosis, openssh-server, openssh-client。其中openssh-server,openssh-client在安装的redhat5.5_x86_64系统中已经默认安装,我们主要的工作是安装git-coregitosis。如果在服务器没有联网的情况下安装git-coregitosis,两软件存在复杂的依赖其他软件包的问题,给安装带来极大地不便,所以在此考虑服务器联网利用yum命令安装git-coregitosis软件。接下来进行redhat5.5_x86_64系统的网络配置。

二、在redhat5.5_x86_64中配置网络

在服务器中设IP、子网掩码、网关、DNS如下:

IP172.16.14.109

MASK255.255.255.0

Gateway172.16.14.1

DNS172.16.35.20

三、安装git-coregitosis

3.1、配置yum

新安装的系统要使用yum,首先需配置yum的源。

rpm-ivh epel-release-5-4.noarch.rpm 32位)

rpm–ivh rpmforge-release-0.5.2-2.el5.rf.x86_64.rpm 64位)

3.2、利用yum安装git-core

首先,进行git-core的安装yuminstall git

然后,给服务器新加用户git,该用户将作为所有代码仓库和用户权限的管理者:

#useradd -m git

git设置密码:

#passwd git //git用户的密码是helloworld


建立一个git仓库的存储点,我放在了/Project/gitroot下,并且让除了git以外的用户对此目录无任何权限

mkdir/Project/gitroot

chowngit:git /Project/gitroot

chmod700 /Project/gitroot

接着初始化一下服务器的git用户,这一步其实是为了安装gitosis做预备,当然在任何一台机器上使用git,第一次必须要初始化一下

git初始化:

gitconfig --global user.name ”A”

gitconfig --global user.email ”A@B.com”

3.3、下载源码包安装gitosis

紧接着安装pythonsetuptool,这个也是为了安装gitosis做预备:

yuminstall python-setuptools

如果yum源中没有的话,就下载源码包,执行如下命令安装:

shsetuptools-0.6c11-py2.4.egg


然后,cd/tmp,执行gitclonegit://eagain.net/gitosis.git下载gitosis,但提示连接不上git://eagain.net/gitosis.git服务器,于是手动下载gitosis.tar.bz2软件包,并把它放到/tmp下解压

tar–jxvf gitosis.tar.bz2

cdgitosis

pythonsetup.py install

到此gitosis安装完成。

四、配置gitosis

4.1、创建git仓库链接

切换到git用户下:

sugit

默认状态下,gitosis会将git仓库放在git用户的home,所以我们做一个链接到/Project/gitroot

$ln-s /Project/gitroot/home/git/repositories

再次返回到默认用户

$exit

4.2、生成并配置ssh公钥

假如你将作为git服务器的管理员,那么在你的电脑上(另一台pc)生成ssh公钥

[此处我们采用windows客户端msysGit-fullinstall,首先要 把此软件装在自己的计算机,然后进入shell去生成ssh公匙。

$ssh-keygen -t rsa -C "A@B.com"

一路回车,不用输入(表示默认路径,不用密码)!!


cd/c/Documents and Settings/Administrator/.ssh

会在该目录下生成id_rsa.pub文件,执行如下命令,将该文件(生成的公钥)拷贝到服务器的/tmp目录下,并给其他人以读权限:

scpid_rsa.pub git@172.16.14.109:/tmp

输入git用户的密码:helloworld

显示:

id_rsa.pub                                   100%  411   0.4KB/s   00:00

表示拷贝id_rsa.pubgit服务器的/tmp目录成功。


来到git服务器端,修改id_rsa.pub为全部用户可读

chmod a+r /tmp/id_rsa.pub //此处是在服务器端操作

4.3、运行gitosis

gitosis运行起来:

sudo-H -u git gitosis-init < /tmp/id_rsa.pub

显示如下内容:

Initializedempty Git repository in /Project/gitroot/gitosis-admin.git/

Reinitializedexisting Git repository in/Project/ gitroot /gitosis-admin.git/

注:

如若使用git进行sudo操作,需要修改sudoers文件,参考文件:

http://blog.163.com/chenzhenhua_007/blog/static/12849264920113181557175/



gitosis的有趣之处在于,它通过一个git仓库来管理配置文件,仓库就放在了/Project/gitroot/gitosis-admin.git

我们需要为一个文件加上可执行权限:

root@/home/git#cd repositories

root@/home/git/repositories# cd gitosis-admin.git/

root@/home/git/repositories/gitosis-admin.git#chmod755/Project/gitroot/gitosis-admin.git/hooks/post-update

(或者直接cdhooks chmod755 post-update,因为软链接关系)

root@/home/git/repositories/gitosis-admin.git#exit

五、在服务器上新建测试项目仓库

在服务器上新建一个空的项目仓库供大家测试一下,我们建了一个叫“teamwork”的仓库切换到git用户:

git@/home/git$su git

$cd/Project/gitroot/HiviewDTV/

$mkdirteamwork.git

$cd teamwork.git

$gitinit --bare(注意,是两个-

$exit

六、管理gitosis的配置文件

6.1、克隆gitosis-admin.git仓库

在自己的电脑里,把gitosis-admin.git这个仓库clone下来,这样你就可以以管理员的身份修改配置了。

MING32的根目录下执行:mkdirworkcdwork

gitclone git@172.16.14.109:/home/git/repositories/gitosis-admin.git

注:gitosis-admin.git仓库只有管理员才可以克隆!!

输入git用户的密码:helloworld

cdgitosis-admin/

该目录下有gitosis.configkeydir两目录,其中keydir是用来存放所有需要访问git服务器的用户的ssh公钥。组内各个用户按照前面提到的办法:在各自的git客户端—msysgit,生成相应的ssh公钥文件,然后把所有人的ssh公钥文件都拿来,按名字命名一下,比如A.pubB.pub,等,统统拷贝到keydir目录下。

例如:cp/path/to/.ssh/id_rsa.pub ./keydir/b.pub

6.2、配置gitosi.conf文件

然后,打开文件gitosis.conf进行配置,配置文件内容大致如下:

[gitosis]

[groupgitosis-admin]

writable= gitosis-admin(写相对于/home/git/repositories的相对路径!!)

members= luzhonghui


[groupteamwork]

writable= ****/teamwork

members= A B


这个配置文件表达了如下含义:

gitosis-admin组成员有B,该组对gitosis-admin仓库有读写权限;

teamwork组成员有AB两个成员,该组对teamwork仓库有读写权限;

6.3push配置文件至gitserver

当然目前这些配置文件的修改只是在你的客户端--msysgit的本地,你必须推送到远程的gitserver上才能真正生效。

git客户端--msysgit加入新文件、提交并pushgit服务器//在客户端操作

/work/gitosis-admin$gitadd . ///注意此处的本目录·不要忽略了

/work/gitosis-admin$gitcommit -am “add teamwork prj and users”

/work/gitosis-admin$gitpush origin master


好了,现在服务器就搭建完了,并且有一个空的项目teamwork在服务器上。

七、初始化测试项目

7.1、初始化空仓库

搭建好的git服务器可以实现teamwork成员对teamwork.git仓库的资料进行简单的上传和下载功能。对搭建好的服务器的上传和下载功能进行测试,空仓库是不能clone的,所以需要某一个有写权限的人初始化一个版本。以下是在客户端完成。

/work$mkdir ****

/work/HviewDTV/$cd ****

/work$mkdir teamwork

/work$cd teamwork/

/work/teamwork$git init         

注:这是在用户端的PC上执行的,为的是初始化一个本地的版本库,

只有管理员才可以执行该操作。

7.2、提交文件至空仓库

/work/…/teamwork$echo “hello,hiview!” > hello

/work/…/teamwork$gitadd .

/work/…/teamwork$gitcommit -am “initial version”

/work/…/teamwork$gitremote add origingit@172.16.14.109:/home/git/repositories/****/teamwork.git

/work/teamwork$git push origin master

以上均为管理员操作的,以下是项目组成员在各自客户端操作的!!

7.3、其他成员对仓库执行操作

到此为止teamwork已经有了一个版本了,teamwork的其他成员只要先clone一下teamwork仓库,就可以执行相应的操作了。

Windows客户端/work/HiviewDTV/目录下,执行

$gitclone git@172.16.14.109/home/git/repositories/****/teamwork.git



注:

普通用户克隆的只是一个git仓库(不能克隆gitosis-admin.git仓库

注:客户端克隆时不需要输入git的密码,因为其C:\DocumentsandSettings\Administrator\.ssh目录下生成的id_rsa私钥文件与其先前上交给管理员的id_rsa.pub公钥文件已经进行通信了!!



然后编辑hello文档,把编辑好的hello文档通过在git客户端mysisgit里执行以下命令

$git add .

$git commit -am “A add”

$git push origin master

上传到git服务器。

八、Git相关操作

8.1、客户端操作

8.1.1客户端安装

Windows系统下,可以使用客户端msysGit来进行Git操作。

直接双击安装文件进行安装,安装的路径为默认的:C:\msysgit,接下来到install,安装过程是git客户端--msysgit小系统编译的过程,编译过程大约需要20分钟,编译过后直接进入到msysgitlinuxshell界面。msysgit安装过程会检测windows系统的本机信息(如电脑用户名),msysgit客户端的linuxshell用户名就是安装过程中检测到的windows系统的本机用户名。

8.1.2生成个人公钥

$cd /F/workspace/

注:此命令意味着进入Fworkspace目录

$ssh-keygen -t rsa -C "A@B.com"//此命令生成公钥

Enterfile in which to save the key(**):

Enterpassphrase (****): 此处可不填,直接回车

Entersame passphrase again:回车

生成的id_rsa.pub交给管理员,由管理员开通权限。

8.1.3gitserver上取代码

$gitconfig --global user.name "your-name"

$gitconfig --global user.email "your-email"

上述配置命令设定你的机器用户,在Git服务器中版本更改记录的更改人员信息就是这些。

$gitclone git@172.16.14.109:/home/git/repositories/git-test.git

从服务器取下代码,git在当前目录生成git-test目录,代码取下成功。

8.1.4回传代码至gitserver

$cdgit-test //即可看到代码目录树

$gitadd . // "."代表当前目录,不可省略

在对代码进行修改、添加等动作之后,把当前目录内容加入index

$gitcommit -am "initial version by wjt"

对代码修改做说明。

$gitpush origin master

代码上传回服务器。


8.2、帐号添加

GitServer帐号添加方式很简单,只需要team其他人员将在其本机客户端上生成的id_rsa.pub公钥文件交给管理员,为方便管理,管理员对该公钥文件进行改名(注:推荐改成各自邮箱前缀.pub,如luzhonghui.pub),然后再将其放入管理员本机的gitosis_admin/keydir/目录下即可。用户登录GitServer时,其提交的公钥文件会与其本机的id_rsa私钥文件进行通信,从而完成身份验证的任务。

8.3、帐号删除

GitServer帐号删除的方式也很简单,只需管理员删除其本机gitosis_admin/keydir/目录下相应人员的.pub文件即可。

8.4、密钥管理

普通用户在GitServer上上传、下载代码时不需要输入密码,只要在管理员的客户端gitosis_admin/keydir/目录下有普通用户提交的id_rsa.pub公钥文件,普通用户客户端上有私钥文件id_rsa,在GitServer上上传、下载代码时,两者(公钥文件和私钥文件)就会自动进行通信,从而验证登录者身份的有效性。



九.Git仓库的搬移(或链接)

9.1、设置搬移脚本

本地的GitServer搭建好后,如何将外部(例如,**)的Git仓库搬运(或链接)到我们的SwDataServer1服务器上呢?很简单,通过运行autosync.sh脚本,可以实现定时搬移(或链接)并同步外部(例如,**)的服务器!!

该脚本内容如下:

#!/bin/bash



echo"------------------------------------------------" >>/home/git/repositories/****/zsynclog #输入信息到log文件

forproj in linux-2.6.27 pmon multimedia toolchain

#对于linux-2.6.27 pmon multimedia toolchain等项目仓库

do

cd$proj.git

echo"`date +"%Y-%m-%d %H:%M:%S"`" >>/home/git/repositories/****/zsynclog#将更新时间输入到log文件

echo"start fetch $proj repo" >>/home/git/repositories//zsynclog#显示开始fetch仓库

gitfetch git@61.4.82.241:hisense/$proj.gitrefs/heads/windriver:refs/heads/windriver >>/home/git/repositories/HiviewDTV/zsynclog

#该命令最关键,表示获取风河的Git仓库

cd..

done

9.2、设置搬移脚本自动运行

通过crontab重复定时执行程序设置该脚本自动运行,切换到git用户,输入crontab–e会进入vi界面,输入:

50 * * * /home/git/repositories/HiviewDTV/autosync.sh

通过如下命令查看刚才的设置:

crontab–u git –l(列出git用户所有的定时配置,该配置在crontab文件中)

显示信息如下:

50 * * * /home/git/repositories/HiviewDTV/autosync.sh

表示在每天的凌晨1205分,执行/home/git/repositories/HiviewDTV/目录下的autosync.sh脚本文件。

补充:

如果其它新加入的成员无法clone一个git仓库时,如出现如下错误提示:

ERROR:gitosis.serve.main:Repositoryread access denied 

原因是当前成员的key命名与在gitosis.conf中的members中的名字不一致!

例如所用的key名是lxq_rsa.pub,而在gitosis.conf中某一group下所用的名称为lxq@ubuntu.pub,则只需要把lxq_rsa.pub重命名为lxq@ubuntu.pub并重新push到服务器上即可!



Reference

http://www.cnblogs.com/xl19862005/archive/2011/06/28/2092464.html

http://www.rosoo.net/a/201102/10956.html


Ubuntu上的操作:

cd /home/luzhonghui

mkdir workspace

//要写相对路径,写绝对路径会导致AccessDenied!!

git clonegit@172.16.14.109:HiviewDTV/tokra_multimedia.git

//仓库只有一个,但是这仅有的一个仓库中,有hisensewindriver两个分支

//默认(origin)为hisense分支

//查看所有分支

git branch –a

//要查看风河仓库中的资料,需要切换到风河的分支

git checkout windriver

//将风河仓库中的资料拉下来

git pull


XP上的操作:

将新生成的liuxifu.pub添加到gitosis.conf后,克隆时要写绝对路径!!

git clonegit@172.16.14.109:/home/git/repositories/HiviewDTV/pmon4hisense.git


ubuntu上写相对路径,XP上写相对路径!!


细节:

生成key时,通过以下命令注册个人信息

#ssh-keygen -t rsa -C“xxx@gmail.com


在进行任何操作之前,一定更要先:gitpull一下,拉下最新状态的git仓库

git pull默认包含gitmerge操作!!

如果不想要其自动gitmerge,要输入gitfetch,然后再手动输入gitmerge!!


git add .

git commit –am “”

git status//git status也要在相应的仓库里执行,因为要看下相应的仓库里是否有未尽事宜!!

git push(默认就是gitpush origin master


当把一个仓库clone下来之后,一定要进入这个仓库后再执行:

git branch –a

git checkout windriver

因为分支都是在相应的仓库里的!!


XP,Win7下输入相对路径clone仓库时密钥不起作用的问题,之前原因出在:

gitosis.conf中相应仓库的成员名和keydir目录下的.pub文件的文件名不统一(例如keydir目录下为LiuXifu.pub,而gitosis.confpmon4hisense仓库下的成员为liuxifu,存在大小写区别)!!


在相应的git仓库下执行gitpull操作


做相应的修改后,先gitstatus,查看需要commit的文件及目录,然后gitadd 相应目录文件,如gitadd keydir/luzhonghui.pub,再gitstatus下查看状态,再gitpush!!


vimdiff查看两个文件的不同!!

安全的git使用方式:

git fetch origin master

git log -p master..origin/master

git merge origin/master


不要改动.pub文件的存储路径(ubuntu下默认为~/.ssh),否则的话,服务器会拒绝连接!!





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值