阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Git 服务器在Ubuntu 12.04上的搭建与使用体验

154次阅读
没有评论

共计 9634 个字符,预计需要花费 25 分钟才能阅读完成。

最近公司在推行研发管理流程改革,其中重要的一项就是启用版本管理工具,作为 coder 的我们当然会双手欢迎了,这样自己的代码可以在服务上面有备份,保证了代码安全,且利用版本管理工具可以实现代码的回溯和修改日志查询,最重要的是同事 之前不再进行手工代码合并了,经过一个礼拜的研究终于在公司的服务器上面搭建好了我们的 Git 版本管理系统,现将自己总结的搭建方法与大家分享,当然也感谢 CSDN 网友的支持,网络的力量两个字“强大”。

推荐阅读

Fedora 通过 Http Proxy 下载 Git http://www.linuxidc.com/Linux/2009-12/23170.htm

在 Ubuntu Server 上安装 Git http://www.linuxidc.com/Linux/2009-06/20421.htm

服务器端 Git 仓库的创建(Ubuntu)http://www.linuxidc.com/Linux/2011-02/32542.htm

Linux 下 Git 简单使用教程(以 Android 为例)http://www.linuxidc.com/Linux/2010-11/29883.htm

Git 权威指南 PDF 高清中文版 http://www.linuxidc.com/Linux/2013-10/91053.htm

准备工作:

1    一台服务器 Server,一台客户端 Client,两台机器安装的都是 Ubuntu12.04  LTS 版本。

2  Server 和 Client 执行命令安装 Git 工具:  apt-get install git git-core  , 记得要使用 root 用户权限.

3  Server 端需要安装 openssh-server:  apt-get install openssh-server

查看:ssh server 是否启动:

ps -e | grep ssh

          849 ?        00:00:00 sshd

          1711 ?        00:00:00 ssh-agent

本人客户机使用了 putty 工具,远程操作服务器, 且使用了 scp 命令在两台 Linux 机器之间直接拷贝文件,所以 open-ssh 服务是必须的。

安装前须知:

Gitosis 简介.

gitosis 主要用来 Git 仓库的权限管理,默认情况下 git 也是有权限管理的,但是不太好用,或者用起来比较复杂,所以选择了 gitosis 第三方的权限      管理工具。使用 Gitosis 可以在 GIt 上面管理访问仓库的用户权限,允许某些用户访问指定的仓库, 对指定的仓库拥有读写控制,gitosis 是基 于 git 的管理方式,服务器安装好 gitosis 以后,超级管理员的客户端 PC 就 “git  clone  gitosis” 到本地, 以后的工作, 比如新仓库创建, 权限管理都是在 超级管理 员的 PC 上进的, 超级管理员的 PC 修改 gitosis 的配置后,需要把修改项提交到服务器端,这样其他的用户才有权限从服务器获取到源码进行 Git 管理, 需要注意的是新仓库的创建,权限的管理务必不要直接在 Git 服务器上面进行修改,超级管理员的 PC 才具有这些功能。

下图是 Server 端安装好的 Gitosis 图片:

Git 服务器在 Ubuntu 12.04 上的搭建与使用体验

下图是客户端 PC 执行命令把 gitosis 下载到本地后的图片,如何下载后面会详细说明.

Git 服务器在 Ubuntu 12.04 上的搭建与使用体验

上图中的其他文件夹是自己创建的 git 仓库,如何创建仓库 后续会有说明.

Git 使用注意事项:

这里再次说明一下,如果新增加一个客户访问仓库权限,或者超级管理员新增加一个仓库,都需要在 Client 的机器上进行,然后再使用 Git 命令上传到服务器端,切不可在 git 服务器上面直接新增加用户或者创建仓库,笔者在这个事情上面花费的时间比较长,另外需要说明的是如果不想要某个仓库了,可以在服务器上直接使用 rm 命令删除掉,Client 机器上也删除掉即可,其他的不需要改动,对了,一个仓库里面只有最顶层目录下面有.git 文件夹,且只有一个.git 隐藏文件夹,这个是跟 SVN 版本管理工具不同的地方,svn 会在每个文件夹下面都有.svn 隐藏文件,如果你在项目里面搜索到有多个.git 隐藏文件夹很可以是项目以前采用了.git 管理,如果是这样的话需要注意了,超级管理员在创建仓库前一定要删除掉项目中所有的.git 隐藏文件夹,如果含有.svn 文件夹也需要删除掉,笔者在 Android 源码中发现了大量的.git 文件夹,在上传到 Git 服务器的时候一直不成功,或者丢失了文件,删除源代码中的.git 文件夹后,再创建仓库,然后上传到中心服务器就 OK 了。

Gitweb 的使用:

另外需要说明的是还有一种通过浏览器查看 git 仓库的方式,这种方式被称为 gitweb, 这种方式是图形界面的,对网内的所有用户开放,也就是说局域网内所有人都可以浏览到仓库代码,可以下载代码,但是不可以在线修改代码,Linux 的官方网站采用了 gitweb 方式,方便研发人员浏览代码。下图是笔者的 PC 通过 gitweb 访问项目组内部 GIt 服务器的效果:

Git 服务器 IP:192.168.1.8  端口默认:1234

Git 服务器在 Ubuntu 12.04 上的搭建与使用体验

可以看到我的 GIt 服务器上面有四个仓库,包含 gitosis-admin 在内,点击 ok335x-source-pub 仓库可以看到我的代码修改记录:

Git 服务器在 Ubuntu 12.04 上的搭建与使用体验

单击右边的 commit 可以知道这次提交改动了哪些文件,commitdff 可以看到本次修改与修改前的代码差异, tree 可以在线阅读代码,snapshot 是代码快照,通过它可以下载到某次提交时的代码, 可以做到代码回溯,是不是很方便呢..

下一篇文章会讲解 GIt 服务器的具体搭建步骤,Gitweb 的安装方法. 见 http://www.linuxidc.com/Linux/2014-04/100148p2.htm

前一篇文章已经对 Git 使用有了一个概括性认识(见 http://www.linuxidc.com/Linux/2014-04/100148.htm
),下面我们将开始具体搭建 Git 服务,和如何创建仓库.

说明: 需要两台 Ubuntu 电脑 l:  电脑 A 作为 Server 端,IP 地址:192.168.1.8,电脑 B  Client 端作为超级管理员.

1 安装 git,git-core(A 和 B 电脑都需要安装)

sudo apt-get install git 
sudo apt-get install git-core 

2 下载 gitosis(Server 端安装,gitosis 是用来迅速搭建 git server 的软件包,详细的介绍可以访问 https://github.com/res0nat0r/gitosis)
 
可以在~下新建目录叫 src

mkdir src 
cd ~/src 
git clone https://github.com/res0nat0r/gitosis.git

注意:github 中和其他网站转载的文章用到的 git clone git://eagain.net/gitosis 无法访问!

3 安装 gitosis(Server 端安装)

cd ~/src/gitosis 
sudo Python setup.py install 

注意:如果报错:ImportError:No module named Setuptools 说明 python 的安装包缺少 setuptools 包。
 
解决方法 1:

sudo apt-get install python-setuptools 

解决方法 2:
 
(1) 安装 python 的安装工具 pip

sudo apt-get install python-pip 

(2) 安装 setuptools

sudo pip install setuptools 

有时候会碰到权限受限的错误,此时最好用 root 执行安装。

4 新建特殊用户 git(Server 端执行)

这个用户主要是用来管理 git 的仓库,名字默认为“git”,也可以用别的名字。但是最好不要用已经存在的用户名。

sudo adduser \
–system \
–shell /bin/sh \
–gecos ‘git version control’ \
–group \
–disabled-password \
–home /home/git \
git

如果成功执行,则会提示

Adding system user ‘git’ (UID 114) …

Adding new group ‘git’ (GID 123) …

Adding new user ‘git’ (UID 114) with group ‘git’ …

Creating home directory ‘/home/git’ …

5 产生 ssh key (电脑 Client 端执行)

因为 gitosis 主要通过 ssh 来实现用户访问,所以需要 SSH key。

在电脑 B 上产生 key 只需要执行

ssh-keygen -t rsa 

公共 key 会在 $HOME/.ssh/id_rsa.pub

6 复制 ssh 公共 key 到 Server 上

建议放到 tmp 目录下,这样可以避免权限限制带来的问题。

具体方法很多,这里不再复述。

例如,直接拷贝

scp ~/.ssh/id_rsa.pub git@computerA:/tmp 

7 电脑 A:初始化 git server

(1) 导入 pub key 并且初始化 gitosis

假设 pub key 在 tmp 目录中为 id_rsa.pub

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

会看到两行输出:

initilailized empty Git repository in /home/git/repositories/gitosis-admin.git/

Reinitillized existing Git repository in /home/git/repositories/gitossi-admin.git/

这个步骤是给超级管理员的电脑授权,授权以后电脑 B 可以使用 git clone 命令下载 gitosis-admin 仓库,这个命令只需要在给超级管理员权限时使用,在增加其他的用户管理权限时,不需要这样做,如何新增加一个用户的 Git 访问权限看步骤 9.

(2) 修改一个文件的访问权限

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

8 电脑 B:同步 gitosis-admin 到 B 电脑开始管理 git server

git clone git@computA:gitosis-admin.git 

这样会在当前目录下 fork 一个 gitosis-admin 的目录。里面有一个配置文件 gitosisi.conf 和一个存放 pub key 的目录 keydir。

注意:有时会碰到如下错误

ssh: connect to host 192.168.0.12 port 22: Connection refused

 fatal: The remote end hung up unexpectedly

说明电脑 A 可能没有安装 SSH server

sudo apt-get install openssh-server 

9 建立新的库和授权用户

如果要新建库,编辑 gitosisi.conf 文件,添加

[gitosis]

[group gitosis-admin]
writable = gitosis-admin
members = user1@pc1 user2@pc2

<span style=”color: rgb(102, 51, 102);”>[group project-a]
writable = project-a
members = user1@pc2 user2@pc2</span>

注意 1:

如果新增加一个用户,需要在新用户的虚拟机里面执行 ssh-keygen -t rsa 命令,一路回车即可,把新生成的 id_rsa.pub 文件放到超级管理员的 PC gitosis-admin->keydir 目录下, 且把文件名字修改为新用户 Ubuntu 机器的名字,其实打开 id_rsa.pub 文件,文件的结尾含有机器的 PC 名字,把名字复制一下就行,注意文件名中含有 .pub 名字. 另外注意修改 gitosis.conf 文件,把机器名添加进入, 如上图所示,另外新建一个仓库也需要添加到 gitosis.conf 文件,上图中 project- a 就是新仓库名字.

如果项目组有多个成员,这就要求每个成员的 Ubuntu 机器名字不能一样,修改每个用户的机器名字,让他们不同,建议每个机器的机器名字含有自己的 ID 信息,以后查看代码提交日志的时候,信息会含有提交者机器的名字,这样便知道是哪位同事提交的代码.

注意 2:

将改动的 conf 文件和新的 key 在超级管理员的 PC 上面执行 git add -> git commit -> git push 命令上传到 git server 即可,这时其他的项目成员就可以 git clone 仓库,进行 Git 管理了.

下图是笔者机器上项目组成员的 key:

Git 服务器在 Ubuntu 12.04 上的搭建与使用体验

10 上传文件到库

这里有两个场景:

(1)全新的项目

(2)已有的 git 仓库恢复

过程差不多,但是对已有的 git 仓库而言,有几个问题需要注意。

比如有项目的文件夹为 project-a

a. 进入项目文件夹

cd project-a

b. 初始化 git 本地仓库, 添加到 git 管理

git init
git add .
git commit  -a  -m “add new project”

c. 建立本地与服务器关联

git remote add origin git@YOUR_GIT_SERVER_HOSTNAME:project-a.git 

d. 提交本地代码

git push origin master:refs/heads/master 

注意:这条命令在超级管理员的机器上面运行,将在服务器上面新创建一个仓库。

至此新的库和对应文件已经上传到 server 端,其他用户可以

git clone git@YOUR_GIT_SERVER_HOSTNAME:project-a.git 

获得项目文件。
对于已有的 git 仓库恢复,指的是 server 端电脑 A 出问题,系统重做后,如何把电脑 B 的内容提交到电脑 A,从而复原 git server。
 
其实步骤都和上面一样,只是如果执行到 10 的 d 步骤时,会提示 rsa 的 key 不匹配,这里只需要将电脑 B ~/.ssh/known_hosts 文件里对应的旧 rsa key 删除即可。
 
比如以前的服务器的 IP 为 192.168.0.12,你会在 known_hosts 文件里看到,如下


113.116.44.123 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC/h79FdQwU2xG7cWncZEzI5gxK1l6p3aoTwneW9snRyTQmAT3OQV5wPiiYrj/W9HyVi7sX0BeaBlGb71ipViOXMrflva3KbCBTx8KZ6vawaSxtIhRaWd+Xzd5Kg3A69IYpLHW/0BTMVh3B53zBbxb9QzFVwfqb3AITEQxd/z6wdxLyTfmxz5CCARUaAi8F7LZ8Q5zNyyAlY5oG92i0/eJ0RmqgyNpno/ZxfoBxkAFAyUtLRbBdsj1eoGynJS9IzqjyW7WTol6aWwmBemn6gZO6FecLgIKSiG4+TYebvTZqC3aBcNxrKTmFqvu80Qv1beZ6kVWjbBOmDBhOdz2Max37
113.118.228.88 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC/h79FdQwU2xG7cWncZEzI5gxK1l6p3aoTwneW9snRyTQmAT3OQV5wPiiYrj/W9HyVi7sX0BeaBlGb71ipViOXMrflva3KbCBTx8KZ6vawaSxtIhRaWd+Xzd5Kg3A69IYpLHW/0BTMVh3B53zBbxb9QzFVwfqb3AITEQxd/z6wdxLyTfmxz5CCARUaAi8F7LZ8Q5zNyyAlY5oG92i0/eJ0RmqgyNpno/ZxfoBxkAFAyUtLRbBdsj1eoGynJS9IzqjyW7WTol6aWwmBemn6gZO6FecLgIKSiG4+TYebvTZqC3aBcNxrKTmFqvu80Qv1beZ6kVWjbBOmDBhOdz2Max37
<del>192.168.0.12 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCs3guvL3wffuMXmEnghFIFzU9leD+n/U1K+U7IOBesHFtTJ0EEpDnusNwaXq/fqtHsA8FMVk7VyI5IzptCq57/Yi1Cpyrv1zUUC2YPSlMl6qMoPiP1QYMAQBPkiAmq6KJIRu14xpZQDu+hHH1b0g7R/Y0ZGaNGzdcsq5UEdMTzyLZZn+6BamzbsF71oLuEwMlI3vhe/wsn8XfuZbRQhae3lt3frhM79JqUcGoGN2FYOeqv3PpyW7k8uIsCAe2HhxprLbLwVOWh0l4gwR0lt8yOrUEoVnmZfOpwCfBpFTg1Wq2UDBddFdm/01P7eJM8millqo6AIATr7sYzDsIAYiql</del>

将对应的 key 删除,保存退出。再执行 push 即可恢复。

11  安装 GitWeb

如果想在本地版本库看看自己项目的效果,不妨用 Git 自带的一个命令,可以使用类似 lighttpd 这样轻量级的 web 服务器启动一个临时进程。如果是在 Linux 主机上,通常都预装了 lighttpd(可到 http://www.lighttpd.net 下载源码进行安装),无须任何配置,可以 git 工作区中键入以下命令来启动。

$ git instaweb

这会在 1234 端口开启一个 HTTPD 服务,随之在浏览器中显示该页,十分简单。关闭服务时,只需在原来的命令后面加上 –stop 选项就可以了:

$ git instaweb –stop

至此完成了 git server 的搭建,或者恢复工作。

Git 的详细介绍 :请点这里
Git 的下载地址 :请点这里

最近公司在推行研发管理流程改革,其中重要的一项就是启用版本管理工具,作为 coder 的我们当然会双手欢迎了,这样自己的代码可以在服务上面有备份,保证了代码安全,且利用版本管理工具可以实现代码的回溯和修改日志查询,最重要的是同事 之前不再进行手工代码合并了,经过一个礼拜的研究终于在公司的服务器上面搭建好了我们的 Git 版本管理系统,现将自己总结的搭建方法与大家分享,当然也感谢 CSDN 网友的支持,网络的力量两个字“强大”。

推荐阅读

Fedora 通过 Http Proxy 下载 Git http://www.linuxidc.com/Linux/2009-12/23170.htm

在 Ubuntu Server 上安装 Git http://www.linuxidc.com/Linux/2009-06/20421.htm

服务器端 Git 仓库的创建(Ubuntu)http://www.linuxidc.com/Linux/2011-02/32542.htm

Linux 下 Git 简单使用教程(以 Android 为例)http://www.linuxidc.com/Linux/2010-11/29883.htm

Git 权威指南 PDF 高清中文版 http://www.linuxidc.com/Linux/2013-10/91053.htm

准备工作:

1    一台服务器 Server,一台客户端 Client,两台机器安装的都是 Ubuntu12.04  LTS 版本。

2  Server 和 Client 执行命令安装 Git 工具:  apt-get install git git-core  , 记得要使用 root 用户权限.

3  Server 端需要安装 openssh-server:  apt-get install openssh-server

查看:ssh server 是否启动:

ps -e | grep ssh

          849 ?        00:00:00 sshd

          1711 ?        00:00:00 ssh-agent

本人客户机使用了 putty 工具,远程操作服务器, 且使用了 scp 命令在两台 Linux 机器之间直接拷贝文件,所以 open-ssh 服务是必须的。

安装前须知:

Gitosis 简介.

gitosis 主要用来 Git 仓库的权限管理,默认情况下 git 也是有权限管理的,但是不太好用,或者用起来比较复杂,所以选择了 gitosis 第三方的权限      管理工具。使用 Gitosis 可以在 GIt 上面管理访问仓库的用户权限,允许某些用户访问指定的仓库, 对指定的仓库拥有读写控制,gitosis 是基 于 git 的管理方式,服务器安装好 gitosis 以后,超级管理员的客户端 PC 就 “git  clone  gitosis” 到本地, 以后的工作, 比如新仓库创建, 权限管理都是在 超级管理 员的 PC 上进的, 超级管理员的 PC 修改 gitosis 的配置后,需要把修改项提交到服务器端,这样其他的用户才有权限从服务器获取到源码进行 Git 管理, 需要注意的是新仓库的创建,权限的管理务必不要直接在 Git 服务器上面进行修改,超级管理员的 PC 才具有这些功能。

下图是 Server 端安装好的 Gitosis 图片:

Git 服务器在 Ubuntu 12.04 上的搭建与使用体验

下图是客户端 PC 执行命令把 gitosis 下载到本地后的图片,如何下载后面会详细说明.

Git 服务器在 Ubuntu 12.04 上的搭建与使用体验

上图中的其他文件夹是自己创建的 git 仓库,如何创建仓库 后续会有说明.

Git 使用注意事项:

这里再次说明一下,如果新增加一个客户访问仓库权限,或者超级管理员新增加一个仓库,都需要在 Client 的机器上进行,然后再使用 Git 命令上传到服务器端,切不可在 git 服务器上面直接新增加用户或者创建仓库,笔者在这个事情上面花费的时间比较长,另外需要说明的是如果不想要某个仓库了,可以在服务器上直接使用 rm 命令删除掉,Client 机器上也删除掉即可,其他的不需要改动,对了,一个仓库里面只有最顶层目录下面有.git 文件夹,且只有一个.git 隐藏文件夹,这个是跟 SVN 版本管理工具不同的地方,svn 会在每个文件夹下面都有.svn 隐藏文件,如果你在项目里面搜索到有多个.git 隐藏文件夹很可以是项目以前采用了.git 管理,如果是这样的话需要注意了,超级管理员在创建仓库前一定要删除掉项目中所有的.git 隐藏文件夹,如果含有.svn 文件夹也需要删除掉,笔者在 Android 源码中发现了大量的.git 文件夹,在上传到 Git 服务器的时候一直不成功,或者丢失了文件,删除源代码中的.git 文件夹后,再创建仓库,然后上传到中心服务器就 OK 了。

Gitweb 的使用:

另外需要说明的是还有一种通过浏览器查看 git 仓库的方式,这种方式被称为 gitweb, 这种方式是图形界面的,对网内的所有用户开放,也就是说局域网内所有人都可以浏览到仓库代码,可以下载代码,但是不可以在线修改代码,Linux 的官方网站采用了 gitweb 方式,方便研发人员浏览代码。下图是笔者的 PC 通过 gitweb 访问项目组内部 GIt 服务器的效果:

Git 服务器 IP:192.168.1.8  端口默认:1234

Git 服务器在 Ubuntu 12.04 上的搭建与使用体验

可以看到我的 GIt 服务器上面有四个仓库,包含 gitosis-admin 在内,点击 ok335x-source-pub 仓库可以看到我的代码修改记录:

Git 服务器在 Ubuntu 12.04 上的搭建与使用体验

单击右边的 commit 可以知道这次提交改动了哪些文件,commitdff 可以看到本次修改与修改前的代码差异, tree 可以在线阅读代码,snapshot 是代码快照,通过它可以下载到某次提交时的代码, 可以做到代码回溯,是不是很方便呢..

下一篇文章会讲解 GIt 服务器的具体搭建步骤,Gitweb 的安装方法. 见 http://www.linuxidc.com/Linux/2014-04/100148p2.htm

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-20发表,共计9634字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中