ubuntu系统下搭建git服务器

前端之家收集整理的这篇文章主要介绍了ubuntu系统下搭建git服务器前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
参考博文:
http://blog.csdn.net/tommy_wxie/article/details/38779667
http://blog.csdn.net/ice520301/article/details/6142503
一、安装git服务器所需软件

打开终端输入以下命令:

sam@ubuntu:~$ sudo apt-get install git-core openssh-server openssh-client git-core是git版本控制核心软件 安装openssh-server和openssh-client是由于git需要通过ssh协议来在服务器与客户端之 间传输文件 然后中间有个确认操作,输入Y后等待系统自动从镜像服务器中下载软件安装,安装完后会回 到用户当前目录。 如果安装提示失败,可能是因为系统sources.list太旧了,先更新一下就可以了,更新命令如 下: sam@ubuntu:~$ sudo sed -i 's/us.archive.ubuntu.com/cn.archive.ubuntu.com/g' /etc/apt/sources.list sam@ubuntu:~$ sudo apt-get update 更新完软件库索引后继续执行上面的安装命令即可。 注意:比较新的git安装方法: 可以使用apt-get方式安装,也可以下载源代码安装【1】,我们这里使用apt-git安装。 但由于直接使用 sudo apt-get install git 安装的版本较老,因此我们给出的PPA源。 sudo add-apt-repository ppa:git-core/ppa sudo apt-get update sudo apt-get install git 安装完成后,检查是否安装成功 如果本地已经安装过Git,可以使用升级命令 sudo apt-get dist-upgrade git --version 显示 git version 2.1.1,表明安装成功。 git颜色配置 git config --global color.diff auto git config --global color.status auto git config --global color.branch auto 安装python的setuptools和gitosis,由于gitosis的安装需要依赖于python的一些工具, 所以我们需要先安装python 的setuptools。 执行下面的命令: sam@ubuntu:~$ sudo apt-get install python-setuptools 这个工具比较小,安装也比较快,接下来准备安装gitosis,安装gitosis之前需要初始化一下 服务器的git用户信息,这个随便填。 sam@ubuntu:~$ git config --global user.name "myname" sam@ubuntu:~$ git config --global user.email "******@gmail.com" 初始化服务器用户信息后,就可以安装gitosis了,gitosis主要是用于给用户授权,设置权限 也算是很方便的。 可以通过以下命令获取gitosis版本文件: sam@ubuntu:~$cd tmp/ sam@ubuntu:~$ git clone https://github.com/res0nat0r/gitosis.git 注意:中间有两个是数字零 或者 ubuntu:~$git clone https://github.com/sitaramc/gitolite 后面有gitolite安装与配 置方法 获取gitosis文件后,进入到文件目录下面 libing@ubuntu:/tmp$ cd gitosis/ 接着使用python命令安装目录下的setup.py的python脚本进行安装 libing@ubuntu:/tmp/gitosis$ sudo python setup.py install 到这里,整个安装步骤就完成了,下面就开始对git进行一些基本的配置。 二、创建git管理员账户、配置git 创建一个账户(git)作为git服务器的管理员,可以管理其他用户的项目权限。1 sam@ubuntu:~$ sudo adduser git Adding user `git' ... Adding new group `git' (1001) ... Adding new user `git' (1001) with group `git' ... Creating home directory `/home/git' ... Copying files from `/etc/skel' ... Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully Changing the user information for git Enter the new value,or press ENTER for the default Full Name []: Room Number []: Work Phone []: Home Phone []: Other []: Is the information correct? [Y/n] y ubuntu:/tmp/gitosis$ sudo passwd git 然后再/home目录下创建一个项目仓库存储点,并设置只有git用户拥有所有权限,其他用户 没有任何权限。 sam@ubuntu:/tmp/gitosis$ sudo mkdir /home/repo sam@ubuntu:/tmp/gitosis$ sudo chown git:git /home/repo/ sam@ubuntu:/tmp/gitosis$ sudo chmod 700 /home/repo/ sam@ubuntu:/tmp/gitosis$ su git 默认状态下,gitosis会将git仓库放在 git用户的home下,所以我们做一个链接 到/home/repo git@ubuntu:$ ln -s /home/repo /home/git/repositories 再次返回到默认用户 $ exit 这里我将在服务器端生成ssh公钥,如果想在其他机器上管理也可以在其他机器上生成一个 ssh的公钥 sam@ubuntu:~$ ssh-keygen -t rsa 这里会提示输入密码,我们不输入直接回车即可。 将公钥拷贝到服务器的/tmp下: usr@pc1:~$ scp .ssh/id_rsa.pub git@<server>:/tmp 回到git服务器上 a@server:/tmp/gitosis$ sudo chmod a+r /tmp/id_rsa.pub 然后用刚生成公钥id_rsa.pub来对gitosis进行初始化。如下: sam@ubuntu:/tmp/gitosis$ sudo -H -u git gitosis-init < /tmp/id_rsa.pub Initialized empty Git repository in /home/repo/gitosis-admin.git/ Reinitialized existing Git repository in /home/repo/gitosis-admin.git/ 出现如上信息说明gitosis已经初始化成功。 gitosis主要是通过gitosis-admin.git仓库来管理一些配置文件的,如用户权限的管理。这里 我们需要对其中的一个post-update文件添加可执行的权限。 sam@server:/home/git$ sudo passwd root sam@server:/home/git$ su root@server:/home/git # cd repositories root@server:/home/git/repositories # cd gitosis-admin.git/ root@server:/home/git/repositories/gitosis-admin.git # sudo chmod 755 /home/rep o/gitosis-admin.git/hooks/post-update root@server:/home/git/repositories/gitosis-admin.git # exit 三、服务器上创建项目仓库 使用git账户在服务器上创建一个目录(teamwork.git)并初始化成git项目仓库。 ubuntu:/home/git$ su git ls gitosis-admin.git mkdir teamwork.git cd teamwork.git/ git init --bare Initialized empty Git repository in /home/repo/teamwork.git/ git@ubuntu:~/repositories/teamwork.git$ exit logout 但是,到目前为止,这只是一个空仓库,空仓库是不能clone下来的。为了能做clone,我们 必须先让某个有权限的人放一个初始化的版本到仓库中。 所以,我们必须先修改一下gitosis-admin. 四、使用gitosis管理用户操作项目的权限 首先需要在前面生成ssh公钥(用来初始化gitosis)的机器上将gitosis-admin.git的仓库 clone下来。 在客户端机器上新建一个目录用于存放gitosis-admin.git仓库 sam@ubuntu:/tmp/gitosis$ cd sam@ubuntu:~$ git clone git@<server>:gitosis-admin.git Cloning into 'gitosis-admin'... remote: Counting objects: 5,done. remote: Compressing objects: 100% (4/4),done. Receiving objects: 100% (5/5),724 bytes,done. remote: Total 5 (delta 0),reused 5 (delta 0) libing@ubuntu:~$ ls gitosis-admin clone下来会有一个gitosis.conf的配置文件和一个keydir的目录。gitosis.conf用于配置用 户的权限信息, keydir主要用户存放ssh公钥文件(一般以“用户名.pub”命名,gitosis.conf配置文件中需 使用相同用户名),用于认证请求的客户端机器。 新建一个用户:zeng sam@ubuntu:~/gitosis-admin$ sudo adduser zeng Adding user `zeng' ... Adding new group `zeng' (1002) ... Adding new user `zeng' (1002) with group `zeng' ... Creating home directory `/home/zeng' ... Copying files from `/etc/skel' ... Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully Changing the user information for zeng Enter the new value,or press ENTER for the default Full Name []: Room Number []: Work Phone []: Home Phone []: Other []: Is the information correct? [Y/n] y 现在让需要授权的用户使用前面的方式各自在其自己的机器上生成相应的ssh公钥文件,管理 员把他们分别按用户名命名好,复制到keydir目录下。 zeng@ubuntu:~$ cp -r zeng.pub /tmp/ zeng@ubuntu:~$ exit sam@ubuntu:~$ cp -r /tmp/zeng.pub ./ sam@ubuntu:~$ cp -r zeng.pub gitosis-admin/keydir/ sam@ubuntu:~/gitosis-admin$ git add . sam@ubuntu:~/gitosis-admin$ git status # On branch master # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # modified: gitosis.conf # new file: keydir/zeng.pub # sam@ubuntu:~/gitosis-admin$ sudo vi gitosis.conf gitosis.conf 文件说明: [group gitosis-admin] ####管理员组 members = charn@ubuntu ####管理员用户名,需要在keydir目录下找到相应的.pub文 件,多个可用空格隔开(下同) writable = gitosis-admin####可写的项目仓库名,多个可用空格隔开(下同) [group testwrite] ####可写权限组 members = zhangsan####组用户 writable = mytestproject####可写的项目仓库名 [group testread] ####只读权限组 members =lisi####组用户 readonly= mytestproject####只读项目仓库名 例如: [gitosis] [group gitosis-admin] members = sam@ubuntu writable = gitosis-admin [group teamwork] members = sam@ubuntu zeng writable = teamwork 修改完gitosis.conf提交: sam@ubuntu:~/gitosis-admin$ git commit -am "add a user permission." [master c32b716] add a user permission. 2 files changed,4 insertions(+) create mode 100644 keydir/zeng.pub libing@ubuntu:~/gitosis-admin$ git push origin master Counting objects: 8,done. Compressing objects: 100% (5/5),done. Writing objects: 100% (5/5),777 bytes,done. Total 5 (delta 0),reused 0 (delta 0) To git@192.168.1.114:gitosis-admin.git 30d1632..c32b716 master -> master libing@ubuntu:~/gitosis-admin$ sudo /etc/init.d/ssh restart 提交完后记得把ssh服务重启,然后推送到服务器中才能生效。 五、初始化测试项目 好了,现在服务器就搭建完了,并且有一个空的项目teamwork在服务器上。接下来呢?当 然是测试一下,空仓库是不能clone的,所以需要某一个有写权限的人初始 化一个版本。就 用刚刚添加的zeng用户来做吧,以下是在客户端完成。 zeng@ubuntu:~/work$ mkdir teamwork-ori zeng@ubuntu:~/work$ cd teamwork-ori/ zeng@ubuntu:~/work/teamwork-ori$ git init zeng@ubuntu:~/work/teamwork-ori$ echo “/*add something*/” > hello zeng@ubuntu:~/work/teamwork-ori$ git add . zeng@ubuntu:~/work/teamwork-ori$ git commit -am “initial version” zeng@ubuntu:~/work/teamwork-ori$ git remote add origin git@<server>:teamwork.gi t zeng@ubuntu:~/work/teamwork-ori$ git push origin master 到此为止teamwork已经有了一个版本了,teamwork的其他成员只要先clone一下 teamwork仓库,就可以任意玩了。 ================================================================================= 安装gitolite步骤 ================================================================================= 从搜索的资料看,gitolite将代替gitosis,所以接下来也介绍下gitolite安装与配置 六、gitolite安装与配置方法 1、安装git:sudo apt-get install git-core 2、生成SSH key(客户端): sam@ubuntu:~$ ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/home/sam/.ssh/id_rsa): Created directory '/home/sam/.ssh'. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/sam/.ssh/id_rsa. Your public key has been saved in /home/sam/.ssh/id_rsa.pub. The key fingerprint is: 35:80:00:54:c0:93:58:d2:da:96:8b:7d:86:ae:1e:bb sam@ubuntu The key's randomart image is: +--[ RSA 2048]----+ |.*==o. .. | |..= . . | | o o o | |. + . . | | + o S | |. + o | | o o | | + | |oE. | +-----------------+ 3、将生成的SSH public key拷贝到/tmp sam@ubuntu:~$ cp -r .ssh/id_rsa.pub /tmp/sam.pub 4、创建Git用户(服务器端) sam@ubuntu:~$ sudo adduser git Adding user `git' ... Adding new group `git' (1001) ... Adding new user `git' (1001) with group `git' ... Creating home directory `/home/git' ... Copying files from `/etc/skel' ... Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully Changing the user information for git Enter the new value,or press ENTER for the default Full Name []: Room Number []: Work Phone []: Home Phone []: Other []: Is the information correct? [Y/n] y 5、下载gitolite源码(服务器端) sam@ubuntu:~$ su git Password: git@ubuntu:/home/sam$ cd $home git@ubuntu:~$ git clone https://github.com/sitaramc/gitolite Cloning into 'gitolite'... remote: Counting objects: 9055,done. remote: Compressing objects: 100% (6/6),done. remote: Total 9055 (delta 0),reused 0 (delta 0),pack-reused 9049 Receiving objects: 100% (9055/9055),3.70 MiB | 1.22 MiB/s,done. Resolving deltas: 100% (5167/5167),done. Checking connectivity... done. git@ubuntu:~$ 6、安装gitolite(服务器端) git@ubuntu:~$ mkdir -p ${HOME}/bin git@ubuntu:~$ ${HOME}/gitolite/install -to ${HOME}/bin 7、设置SSH public key(服务器端) git@ubuntu:~$ ${HOME}/bin/gitolite setup -pk /tmp/sam.pub Initialized empty Git repository in /home/git/repositories/gitolite-admin.git/ Initialized empty Git repository in /home/git/repositories/testing.git/ WARNING: /home/git/.ssh missing; creating a new one (this is normal on a brand new install) WARNING: /home/git/.ssh/authorized_keys missing; creating a new one (this is normal on a brand new install) git@ubuntu:~$ 其实,到这里,gitolite已经安装完成。接下来就是添加Git项目,用户和Git项目访问权限了 8、克隆gitolite管理库(客户端) sam@ubuntu:~$ git clone git@192.168.1.114:gitolite-admin.git Cloning into 'gitolite-admin'... The authenticity of host '192.168.1.114 (192.168.1.114)' can't be established. ECDSA key fingerprint is 69:10:22:ed:f3:1c:e7:c0:3a:15:db:3e:50:61:65:4e. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '192.168.1.114' (ECDSA) to the list of known hosts. remote: Counting objects: 6,done. Receiving objects: 100% (6/6),728 bytes | 0 bytes/s,done. remote: Total 6 (delta 0),reused 0 (delta 0) Checking connectivity... done. sam@ubuntu:~$ 你可以看到在管理库里,有两个目录, conf/和keydir/,其中conf/下面有个名为 gitolite.conf的配置文件。 conf/gitolite.conf 用于Git项目配置,访问权限设置。 keydir/ 用于存储用户的SSH public key(公钥)。 例如: sam@ubuntu:~/gitolite-admin/conf$ vi gitolite.conf repo gitolite-admin RW+ = sam repo testing RW+ = @all 9、服务器上创建项目仓库 使用git账户在服务器上创建一个目录(testing.git)并初始化成git项目仓库。 ubuntu:/home/git$ su git git@ubuntu:~/repositories$ ls gitosis-admin.git git@ubuntu:~/repositories$ mkdir testing.git git@ubuntu:~/repositories$ cd testing.git/ git@ubuntu:~/repositories/teamwork.git$ git init --bare Initialized empty Git repository in /home/repo/testing.git/ git@ubuntu:~/repositories/teamwork.git$ exit 但是,到目前为止,这只是一个空仓库,空仓库是不能clone下来的。为了能做clone,我们 必须先让某个有权限的人放一个初始化的版本到仓库中。 10、初始化Git 项目:testing.git 一个空仓库是不能clone的,如果clone就会报错,如下: libing@ubuntu:~$ git clone git@192.168.1.114:testing.git Cloning into 'testing'... warning: You appear to have cloned an empty repository. Checking connectivity... done. 所以我们要把testing.git初始化才可以clone libing@ubuntu:~$ mkdir test libing@ubuntu:~$ cd test/ libing@ubuntu:~/test$ git init Initialized empty Git repository in /home/libing/test/.git/ libing@ubuntu:~/test$ echo "ininial project of testing." > hello.txt libing@ubuntu:~/test$ git add . libing@ubuntu:~/test$ git commit -am "initial version." [master (root-commit) 1735cda] initial version. 1 file changed,1 insertion(+) create mode 100644 hello.txt libing@ubuntu:~/test$ git remote add origin git@192.168.1.114:testing.git libing@ubuntu:~/test$ git push origin master Counting objects: 3,done. Writing objects: 100% (3/3),238 bytes | 0 bytes/s,done. Total 3 (delta 0),reused 0 (delta 0) To git@192.168.1.114:testing.git * [new branch] master -> master libing@ubuntu:~/test$ 现在testing所属成员就可以clone了 原文链接:/ubuntu/351958.html

猜你在找的Ubuntu相关文章