如何将git服务器提供给其他人使用

如何将git服务器提供给其他人使用,第1张

1 架设Git服务器

我们以Ubuntu为例。首先,在git服务器上创建一个名为 'git' 的用户,并为其创建一个ssh 目录。并将其权限设置为仅git用户有读写权限

$ sudo adduser git

$ su git

$ cd

$ mkdir ssh

$ chmod 700 ssh

接下来,把开发者的 SSH 公钥添加到这个用户的 authorized_keys 文件中。假设你通过电邮收到了几个公钥并存到了临时文件里。重复一下,公钥大致看起来是这个样子:

$ cat /tmp/id_rsajohnpub

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCB007n/ww+ouN4gSLKssMxXnBOvf9LGt4L

ojG6rs6hPB09j9R/T17/x4lhJA0F3FR1rP6kYBRsWj2aThGw6HXLm9/5zytK6Ztg3RPKK+4k

Yjh6541NYsnEAZuXz0jTTyAUfrtU3Z5E003C4oxOj6H0rfIF1kKI9MAQLMdpGW1GYEIgS9Ez

Sdfd8AcCIicTDWbqLAcU4UpkaX8KyGlLwsNuuGztobF8m72ALC/nLF6JLtPofwFBlgc+myiv

O7TCUSBdLQlgMVOFq1I2uPWQOkOWQAHukEOmfjy2jctxSDBQ220ymjaNsHT4kgtZg2AYYgPq

dAv8JggJICUvax2T9va5 gsg-keypair

只要把它们逐个追加到 authorized_keys 文件尾部即可,同时将authorized_keys设置为仅git用户有读写权限。

$ cat /tmp/id_rsajohnpub >> ~/ssh/authorized_keys

$ cat /tmp/id_rsajosiepub >> ~/ssh/authorized_keys

$ cat /tmp/id_rsajessicapub >> ~/ssh/authorized_keys

$ chmod 600 ~/ssh/authorized_keys

现在可以用 --bare 选项运行 git init 来建立一个裸仓库,这会初始化一个不包含工作目录的仓库。

$ cd /opt/git

$ mkdir projectgit

$ cd projectgit

$ git --bare init

这时,Join,Josie 或者 Jessica 就可以把它加为远程仓库,推送一个分支,从而把第一个版本的项目文件上传到仓库里了。值得注意的是,每次添加一个新项目都需要通过 shell 登入主机并创建一个裸仓库目录。我们不妨以 gitserver 作为 git 用户及项目仓库所在的主机名。如果在网络内部运行该主机,并在 DNS 中设定 gitserver 指向该主机,那么以下这些命令都是可用的:

# 在 John 的电脑上

$ cd myproject

$ git init

$ git add

$ git commit -m 'initial commit'

$ git remote add origin git@gitserver:/opt/git/projectgit

$ git push origin master

这样,其他人的克隆和推送也一样变得很简单:

$ git clone git@gitserver:/opt/git/projectgit

$ vim README

$ git commit -am 'fix for the README file'

$ git push origin master

用这个方法可以很快捷地为少数几个开发者架设一个可读写的 Git 服务。

作为一个额外的防范措施,你可以用 Git 自带的 git-shell 工具限制 git 用户的活动范围。只要把它设为 git 用户登入的 shell,那么该用户就无法使用普通的 bash 或者 csh 什么的 shell 程序。编辑/etc/passwd 文件:

$ sudo vim /etc/passwd

在文件末尾,你应该能找到类似这样的行:

git:x:1000:1000::/home/git:/bin/sh

把 bin/sh 改为 /usr/bin/git-shell (或者用 which git-shell 查看它的实际安装路径)。该行修改后的样子如下:

git:x:1000:1000::/home/git:/usr/bin/git-shell

现在 git 用户只能用 SSH 连接来推送和获取 Git 仓库,而不能直接使用主机 shell。尝试普通 SSH 登录的话,会看到下面这样的拒绝信息:

$ ssh git@gitserver

fatal: What do you think I am A shell

Connection to gitserver closed

这里提供的方法,组内所有成员对project都有读写权限,也就是说每个分支都可以push代码,如果需要更加细致的权限控制,请使用Gitosis或者Gitolite。

2 搭建Gitweb

安装gitweb之后就可以通过网站访问我们的项目了。就像http://gitkernelorg一样显示了

首先需要安装Gitweb,如果没有安装apache,那么直接安装Gitweb,也会将apache2安装的。

$ sudo apt-get install gitweb apache2

安装完成之后,我们只需要修改一下配置文件,将/etc/gitwebconf文件中的$projectroot修改为放工程文件的目录。

$ vim /etc/gitwebconf

# path to git projects (<project>git)

$projectroot = "/opt/git";

至此gitweb就可以使用了,现在可以通过http://[git_server_IP]/gitweb访问了。

3 Push之后发送邮件通知

当组内成员push代码到服务器上之后,会自动发送邮件通知组内所有人员,该次push的具体内容是什么。具体配置方法:

一般在安装Git的时候发送邮件的脚本/usr/share/git-core/contrib/hooks/post-receive-email已经存在了,首先要修改所有者和执行权限,并且安装sendmail。

$ sudo chown git:git post-receive-email

$ sudo chmod 755 post-receive-email

$ sudo apt-get install sendmail

然后到切换到工程目录下的hooks中,添加 post-receive软链接指向 /usr/share/git-core/contrib/hooks/ post-receive-email。

$ cd /opt/git/projectgit/hooks

$ ln -s /usr/share/git-core/contrib/hooks/post-receive-email post-receive

最后修改工程目录中的config文件即可。mailinglist是邮件列表, envelopesender是发件人的邮箱,

$ vim /opt/git/projectgit/config

[core]

repositoryformatversion = 0

filemode = true

bare = true

[hooks]

mailinglist = "example@gmailcom, example2@gmailcom" # 收件人列表

envelopesender = projectgit@examplecom # 送件人地址

emailprefix = "[Project commit] " # 邮件标题前缀

showrev = "git show -C %s; echo" # 不只显示有变化的文件,同时也显示改变的内容

为了使邮件显示的更清楚,还要修改一下工程目录当中的description文件,在description文件中,默认第一行是项目名称,所以要在第一行填入该项目的名称,这个在邮件中会有显示。

$ vim /opt/git/projectgit/description

Project_A

搭建Git服务器需要准备一台运行Linux的机器,强烈推荐用Ubuntu或Debian,这样,通过几条简单的apt命令就可以完成安装。

假设你已经有sudo权限的用户账号,下面,正式开始安装。

第一步,安装git:

$ sudo apt-get install git

第二步,创建一个git用户,用来运行git服务:

$ sudo adduser git

第三步,创建证书登录:

收集所有需要登录的用户的公钥,就是他们自己的id_rsapub文件,把所有公钥导入到/home/git/ssh/authorized_keys文件里,一行一个。

第四步,初始化Git仓库:

先选定一个目录作为Git仓库,假定是/srv/samplegit,在/srv目录下输入命令:

$ sudo git init --bare samplegit

Git就会创建一个裸仓库,裸仓库没有工作区,因为服务器上的Git仓库纯粹是为了共享,所以不让用户直接登录到服务器上去改工作区,并且服务器上的Git仓库通常都以git结尾。然后,把owner改为git:

$ sudo chown -R git:git samplegit

第五步,禁用shell登录:

出于安全考虑,第二步创建的git用户不允许登录shell,这可以通过编辑/etc/passwd文件完成。找到类似下面的一行:

git:x:1001:1001:,,,:/home/git:/bin/bash

改为:

git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell

这样,git用户可以正常通过ssh使用git,但无法登录shell,因为我们为git用户指定的git-shell每次一登录就自动退出。

第六步,克隆远程仓库:

现在,可以通过git clone命令克隆远程仓库了,在各自的电脑上运行:

$ git clone git@server:/srv/samplegit

Cloning into 'sample'

warning: You appear to have cloned an empty repository

我现在使用的是小鸟云,他们目前官网有活动,3折优惠,建议去看看!

我使用的gogs+cetos6搭建git服务器,因为gogs搭建服务器比较简单

我给您大概说一下搭建过程

linux服务器上安装mysql,并创建gogs数据库

linux服务器上安装git

linux服务器上安装gogs

运行/gogs web ,然后可以通过浏览器访问: localhost:3000配置服务器

最后是开启防火墙端口3000(gogs默认端口)

因为不熟悉Ubuntu,但是过程是一样的,您可以尝试一下 :)

本文介绍如何在 mac 机器上创建 Git 服务器,总体思路是:使用gitosis来简化创建过程,在用作服务器的机器上创建一个名为 git 的账户来创建 git 服务器,其他客户端通过 ssh 机制访问 git 服务器。

一,创建 git 账户

1,在用作服务器的机器上创建 git 账户。我们可以通过 System Preferences->accounts 来添加。在这里我添加一个 git 的 administrator 账户,administrator 不是必须的,在这里仅仅为了方便。

2,设置远程访问

logout 当前账户,使用 git 账户登录;在 System Preferences->Sharing 中,勾选 Remote Login。

二,下载安装 gitosis

1,Mac OSX Yosemite 默认已经为我们安装了 Git 和 Python,可以使用如下命令查看其版本信息:

yourname:~ git$git--version

git version 232 (Apple Git-55)

yourname:~ git$python--version

Python 279

2,通过命令 git clone git@githubcom:tv42/gitosisgit 来下载 gitosis

yourname:~ git$ git clone git@githubcom:tv42/gitosisgit

Cloning into gitosis

remote: Counting objects: 614, done

remote: Compressing objects: 100% (183/183), done

remote: Total 614 (delta 434), reused 594 (delta 422)

Receiving objects: 100% (614/614), 9382 KiB | 45 KiB/s, done

Resolving deltas: 100% (434/434), done

3,进入 gitosis 目录,使用命令 sudo python setuppy install 来执行 python 脚本来安装 gitosis。

yourname:~ git$ cd gitosis/yourname:gitosis git$ sudo python setuppy install

running install

running bdist_egg

running egg_info

creating gitosisegg-info

……

Using /Library/Python/26/site-packages/setuptools-06c9-py26egg

Finished processing dependencies for gitosis==02

三,制作 ssh rsa 公钥

1,回到 client 机器上,制作 ssh 公钥。在这里我的使用同一台机器上的另一个账户作为 client。如果作为 client 的机器与作为 server 的机器不是同一台,也是类型的流程:制作公钥,放置到服务的 /tmp 目录下。只不过在同一台机器上,我们可以通过开启另一个 terminal,使用 su 切换到 local 账户就可以同时操作两个账户。

yourname:~ git$ su local_accountPassword:bash-32$ cd ~

bash-32$ ssh-keygen -t rsa

Generating public/private rsa key pair

Enter file in which to save the key (/Users/local_account/ssh/id_rsa):

Enter passphrase (empty for no passphrase):

Enter same passphrase again:Your identification has been saved in /Users/local_account/ssh/id_rsa

Your public key has been saved in /Users/local_account/ssh/id_rsapub

bash-32$ cd ssh

bash-32$ ls

id_rsa        id_rsapub

bash-32$ cp id_rsapub /tmp/youramepub

在上面的命令里,首先通过 su 切换到 local 账户(只有在同一台机器上才有效),然后进入到 local 账户的 home 目录,使用 ssh-keygen -t rsa 生成 id_rsapub,最后将该文件拷贝放置到  /tmp/yournamepub,这样 git 账户就可以访问 yournamepub了,在这里改名是为了便于在 git 中辨识多个 client。

四,使用 ssh 公钥初始化 gitosis

1,不论你是以那种方式(邮件,usb等等)拷贝 yournamepub 至服务器的 /tmp/yournamepub。下面的流程都是一样,登入服务器机器的 git 账户,进入先前提到 gitosis 目录,进行如下操作初始化 gitosis,初始化完成后,会在 git 的 home 下创建 repositories 目录。

yourname:gitosis git$ sudo -H -u git gitosis-init < /tmp/yournamepub

Initialized empty Git repository in /Users/git/repositories/gitosis-admingit/

Reinitialized existing Git repository in /Users/git/repositories/gitosis-admingit/

在这里,会将该 client 当做认证受信任的账户,因此在 git 的 home 目录下会有记录,文件 authorized_keys 的内容与 yournamepub 差不多。

yourname:~ git$ cd ~yourname:~ git$ cd sshyourname:ssh git$ ls

authorized_keys

我们需要将 authorizd_keys 稍做修改,用文本编辑器打开它,删除里面的"command="gitosis-serve yourname",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty " 这一行:

yourname:ssh git$ open -e authorized_keys

然后,我们对 post-update 赋予可写权限,以便 client 端可以提交更改。

yourname:gitosis git$ sudo chmod 755 /Users/git/repositories//gitosis-admingit/hooks/post-update

Password:

yourname:ssh git$ cd ~

yourname:~ git$ cd repositories/

yourname:repositories git$ ls

gitosis-admingit

yourname:repositories git$

在上面的命令中可以看到,gitosis 也是作为仓库的形式给出,我们可以在其他账户下 checkout,然后对 gitosis 进行配置管理等等,而无需使用服务器的 git 账户进行。

最后一步,修改 git 账户的 PATH 路径。

yourname:gitosis git$ touch ~/bashrc

yourname:gitosis git$ echo PATH=/usr/local/bin:/usr/local/git/bin:\$PATH > bashrc

yourname:gitosis git$ echo export PATH >> bashrc

yourname:gitosis git$ cat bashrc

PATH=/usr/local/bin:/usr/local/git/bin:$PATHexport PATH

至此,服务器的配置完成。

五,client 配置

1,回到 local 账户,首先在 terminal 输入如下命令修改 local 的 git 配置:

bash-32$ git config --global username "yourgitname"bash-32$ git config --global useremail "yourmail@yourcomcom"

2,测试服务器是否连接正确,将 1014211 换成你服务的名称或服务器地址即可。

yourname:~ local_account$ ssh git@1014211Last login: Mon Nov  7 13:11:38 2011 from 1014211

3,在本地 clone 服务器仓库,下面以 gitosis-admingit 为例:

bash-32$ git clone git@1014211:repositories/gitosis-admingit

Cloning into gitosis-adminremote: Counting objects: 5, doneremote: Compressing objects: 100% (5/5), doneremote: Total 5 (delta 0), reused 5 (delta 0)

Receiving objects: 100% (5/5), done

bash-32$ ls

Desktop        InstallApp    Music        Sites

Documents    Library        Pictures    gitosis-admin

Downloads    Movies        Public

bash-32$ git

在上面的输出中可以看到,我们已经成功 clone 服务器的 gitosis-admin 仓库至本地了。

4,在本地管理 gitosis-admin:

进入 gitosis-admin 目录,我们来查看一下其目录结构:gitosisconf 文件是一个配置文件,里面定义哪些用户可以访问哪些仓库,我们可以修改这个配置;`keydir` 是存放ssh 公钥的地方。

bash-32$ cd gitosis-admin/

bash-32$ ls

gitosisconf keydir

bash-32$ cd keydir/

bash-32$ ls

yournamepub

我们只需要将其他 client 产生的 ssh 公钥添加到 keydir 目录下,并在 gitosisconf 文件中配置这些用户可以访问的仓库(用户名与放置在 keydir 下sh 公钥名相同,这就是在前面我们要修改ssh 公钥名的原因),然后将改动提交至服务器,这样就可以让其他的 client 端访问服务器的代码仓库了。

5,仓库权限管理

gitosisconf文件是用来设置用户、仓库和权限的控制文件。keydir 目录则是保存所有具有访问权限用户公钥的地方— 每人一个。在 keydir 里的文件名(比如上面的 yournamepub)应该跟你的不一样 — Gitosis 会自动从使用 gitosis-init 脚本导入的公钥尾部的描述中获取该名字。

看一下 gitosisconf 文件的内容,它应该只包含与刚刚克隆的 gitosis-admin 相关的信息:

$ cat gitosisconf

[gitosis]

[group gitosis-admin]

members = scott

writable = gitosis-admin

它显示用户 yourname — 初始化 Gitosis 公钥的拥有者 — 是唯一能管理 gitosis-admin 项目的人。

现在我们来添加一个新项目。为此我们要建立一个名为 mobile 的新段落,在其中罗列手机开发团队的开发者,以及他们拥有写权限的项目。由于 yourname 是系统中的唯一用户,我们把他设为唯一用户,并允许他读写名为 iphone_project 的新项目:

[group mobile]

members = scott

writable = iphone_project

修改完之后,提交 gitosis-admin 里的改动,并推送到服务器使其生效:

$ git commit -am 'add iphone_project and mobile group'[master 8962da8] add iphone_project and mobile group

1 file changed, 4 insertions(+)

$ git push origin master

Counting objects: 5, done

Compressing objects: 100% (3/3), done

Writing objects: 100% (3/3), 272 bytes | 0 bytes/s, done

Total 3 (delta 0), reused 0 (delta 0)

To git@gitserver:gitosis-admingit

fb27aec8962da8  master -> master

6,添加新项目到仓库种

在新工程 iphone_project 里首次推送数据到服务器前,得先设定该服务器地址为远程仓库。但你不用事先到服务器上手工创建该项目的裸仓库— Gitosis 会在第一次遇到推送时自动创建:

$ git remote add origin git@gitserver:iphone_projectgit

$ git push origin master

Initialized empty Git repository in /opt/git/iphone_projectgit/

Counting objects: 3, done

Writing objects: 100% (3/3), 230 bytes | 0 bytes/s, done

Total 3 (delta 0), reused 0 (delta 0)

To git@gitserver:iphone_projectgit

[new branch]      master -> master

请注意,这里不用指明完整路径(实际上,如果加上反而没用),只需要一个冒号加项目名字即可 — Gitosis 会自动帮你映射到实际位置。

要和朋友们在一个项目上协同工作,就得重新添加他们的公钥。不过这次不用在服务器上一个一个手工添加到 ~/ssh/authorized_keys 文件末端,而只需管理 keydir 目录中的公钥文件。文件的命名将决定在 gitosisconf 中对用户的标识。现在我们为 John,Josie 和 Jessica 添加公钥:

$ cp /tmp/id_rsajohnpub keydir/johnpub

$ cp /tmp/id_rsajosiepub keydir/josiepub

$ cp /tmp/id_rsajessicapub keydir/jessicapub

然后把他们都加进 mobile 团队,让他们对 iphone_project 具有读写权限:

[group mobile]

members = scott john josie jessica

writable = iphone_project

如果你提交并推送这个修改,四个用户将同时具有该项目的读写权限。

Gitosis 也具有简单的访问控制功能。如果想让 John 只有读权限,可以这样做:

[group mobile]

members = scott josie jessica

writable = iphone_project

[group mobile_ro]

members = johnreadonly = iphone_project

现在 John 可以克隆和获取更新,但 Gitosis 不会允许他向项目推送任何内容。像这样的组可以随意创建,多少不限,每个都可以包含若干不同的用户和项目。甚至还可以指定某个组为成员之一(在组名前加上 @ 前缀),自动继承该组的成员:

[group mobile_committers]

members = scott josie jessica

[group mobile]

members   = @mobile_committers

writable  = iphone_project

[group mobile_2]

members   = @mobile_committers john

writable  = another_iphone_project

如果遇到意外问题,试试看把 loglevel=DEBUG 加到 [gitosis] 的段落(译注:把日志设置为调试级别,记录更详细的运行信息。)。如果一不小心搞错了配置,失去了推送权限,也可以手工修改服务器上的 /home/git/gitosisconf 文件 — Gitosis 实际是从该文件读取信息的。它在得到推送数据时,会把新的 gitosisconf 存到该路径上。所以如果你手工编辑该文件的话,它会一直保持到下次向 gitosis-admin 推送新版本的配置内容为

linux。Git支持Wcindows和Linux和Mac系统的安装,实际工作项目中,一般是安装到linux系统上作为一个git服务器来使用。学习使用,安装到自己windows电脑就可以。

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » 如何将git服务器提供给其他人使用

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情