私有git 搭建

这里使用的操作系统是CentOS release 5.9 (Final),并且已经安装了Git和一些必要的开发工具。

在服务器上创建用户和项目仓库(repository)

  1. useradd git #创建git用户
  2. passwd git #设置密码
  3. su git #切换到git用户
  4. cd ~/ #切换到home目录
  5. git init --bare cube #创建一个叫cube的项目仓库

clone项目并提交修改(本地)

git clone [email protected]地址:cube ~/cube

需要说明的是这里会要求输入用户git的密码,我们稍后建立主机信任后就不需要输入密码了.
然后在cube下创建一个README.txt

  1. git add *
  2. git commit -m "create new file"
  3. git push origin master

建立主机信任关系

在本地执行

  1. ssh-keygen -t rsa
  2. cat ~/.ssh/id_rsa.pub

拷贝文件公钥内容

在服务器执行

  1. mkdir ~/.ssh
  2. chmod 755 ~/.ssh
  3. touch ~/.ssh/authorized_keys
  4. chmod 600 ~/.ssh/authorized_keys
  5. echo 拷贝的公钥 >> ~/.ssh/authorized_keys

要注意文件权限的问题.

使用gitosis来配置和管理git服务端

Gitosis是为托管的Git存储库提供访问控制和远程管理的工具。它允许通过SSH对读写访问进行细粒度管理,而不需要用户在服务器上具有本地系统帐户。为此,它设置一个单一的系统帐户“ git”,然后用于所有Git访问。

AUR安装gitosis-gitAUR包。这将创造三件事:

  • git用户
  • git该用户所属的组
  • /srv/gitosis目录将保存Gitosis的数据和存储库

要配置Gitosis,您不要直接在服务器上编辑文件。相反,Gitosis提供了一个包含配置的Git存储库。要更新此配置,您gitosis-admin可以像任何其他存储库一样克隆,提交和推送。

由于Gitosis使用SSH密钥对用户进行身份验证,因此您将需要生成一个用于管理存储库的密钥对。如果没有,可以使用ssh-keygen例如:

$ ssh-keygen -t rsa

您现在可以初始化管理存储库。

$ sudo -H -u git gitosis-init </path/to/public_key.pub
初始化的空Git仓库在/srv/gitosis/repositories/gitosis-admin.git/
在/srv/gitosis/repositories/gitosis-admin.git/中重新初始化现有的Git仓库

注意:在某些情况下,这可能会导致此类错误:

OSError:[Errno 13] Permission denied:‘// gitosis‘

原因可能是git主目录没有正确设置。通过手动设置来修复它:

#usermod -d / srv / gitosis git

此外,此命令创建/srv/gitosis/repositories将存储实际托管存储库的目录。

在管理存储库初始化完成后,禁用用户git的基于密码的ssh登录可能是合理的。

要实现这一点,添加

匹配用户git
密码验证号

在......的最后 /etc/ssh/sshd_config

组态

如上所述,通过将提交推送到gitosis-admin存储库来配置Gitosis 。要克隆此存储库(使用Gitosis!),请运行:

$ git clone [email protected]:gitosis-admin.git

gitosis-admin存储库中,您将看到两件事:

  • gitosis.conf - Gitosis和存储库权限的配置文件
  • keydir - 包含每个用户公用密钥的目录

要修改存储库或用户,或配置Gitosis,只需提交克隆中的更改并将其推回到服务器。

存储库和权限

您可以在/ usr / share / doc / gitosis中找到一些示例配置文件。

[Gitosis的]
gitweb = yes

[repo foobar]
description = foobar的Git仓库
owner = user

[组开发者]
members = user1 user2

[组管理员]
members = user1

[组gitosis-admin]
writable = gitosis-admin
members = @admins

[组foobar]
可写= foobar
members = @devs

[组myteam]
writable = free_monkey
会员= jdoe

[组部署者]
writable = free_monkey
readonly = monkey_deployer

这定义了一个名为“free_monkey”的新组,它是一个任意字符串。“jdoe”是myteam的成员,可以访问“gitosis”存储库。“monkey_deployer”键将只能访问“free_monkey”。

将此添加到gitosis.conf中,提交并推送它:

$ git commit -a -m“允许jdoe写入访问free_monkey”
$ git push

现在,用户“jdoe”可以访问名为“free_monkey”的存储库,但是我们还没有创建一个存储库。我们将做的是在本地创建一个新的存储库,在Git服务器上进行初始化,然后推送它:

$ mkdir free_monkey
$ cd free_monkey
$ git init
$ git remote add origin git @ YOUR_SERVER_HOSTNAME:free_monkey.git

做一些工作,git添加和提交文件

$ git push origin master:refs / heads / master

当使用SSH时,最后一个命令将失败,并显示错误消息“不显示为Git存储库”这可以通过在服务器上手动初始化存储库来修复

$ git init --bare /srv/gitosis/repositories/free_monkey.git

并重试最后一个命令

随着最后的推动,你将会参加比赛。存储库“free_monkey”已在服务器上创建(在/ srv / gitosis / repositories中),您可以像任何ol‘Git存储库一样开始使用它。

Git病毒库也可以用于gitweb; 只需将gitweb配置中包含存储库的目录指向。

添加用户

下一个自然的事情是让幸运的几个提交访问FreeMonkey项目。这是一个简单的两步过程。

首先,收集他们的公共SSH密钥,我将其称为“alice.pub”和“bob.pub”,并将其放入当地gitosis-admin存储库的keydir /。其次,编辑gitosis.conf并将其添加到“成员”列表中。

$ cd gitosis-admin
$ cp/ alice.pub keydir /
$ cp/ bob.pub keydir /
$ git add keydir / alice.pub keydir / bob.pub

请注意,密钥文件名必须有“.pub”扩展名。

gitosis.conf更改:

[组myteam]
member = jdoe alice bob
writable = free_monkey

提交和推送:

$ git commit -a -m“授予Alice和Bob授予FreeMonkey的权限”
$ git push

而已。Alice和Bob现在可以像这样克隆free_monkey存储库:

$ git clone git @ YOUR_SERVER_HOSTNAME:free_monkey.git

爱丽丝和鲍勃也将有承诺的权利。

公共访问

如果您正在运行一个公共项目,您的用户将拥有提交权限,然后您将拥有其他所有人。我们如何让别人只读访问,而不用SSH密钥?

我们只是使用git-daemon。这是独立于Gitosis,它与Git本身一起。

$ sudo -u git git-daemon --base-path = / srv / gitosis / repositories / --export-all

这将使您使用Gitosis管理的所有存储库对于公众来说是只读的。有人可以像这样克隆FreeMonkey:

$ git clone git://YOUR_SERVER_HOSTNAME/free_monkey.git

要仅导出一些存储库而不是其他存储库,您需要在要公开的每个存储库的根目录(例如/srv/gitosis/repositories/free_monkey.git)内触摸git-daemon-export-ok。然后从上面的git-daemon命令中删除“--export-all”。

更多的技巧

gitosis.conf可以设置做一些其他的巧妙的技巧。在Gitosis源目录中打开example.conf(您最初在顶部克隆Gitosis方式),以查看所有选项的摘要。您可以将一些存储库指定为只读(与可写)相反,但尚未公开)。组成员列表可以包括另一个组。还有一些其他的技巧,我会留给读者发现。

注意事项

如果您的服务器上的/srv/gitosis/.gitosis.conf似乎没有更新,以匹配您的本地副本(他们应该匹配),即使您正在进行更改和推送,可能是您的更新后挂接不可执行。较旧版本的setuptools可能导致这种情况。一定要解决这个问题:

#chmod 755 /srv/gitosis/repositories/gitosis-admin.git/hooks/post-update

如果您的Python好东西处于非标准位置,则必须另外编辑更新后,并在顶部放置“export PYTHONPATH = ...”行。第一次尝试在gitosis-admin中推送更改时,不这样做会给您一个Python堆栈跟踪。

如果您想在非标准位置安装Gitosis,我不推荐它。这是一个边缘的情况,作者没有反抗,直到我发现他帮助我让它工作。

对于勇气,您需要编辑系统上的任何文件来控制非登录,非交互式shell的默认PATH。在Ubuntu上,这是/ etc / environment。将Gitosis的路径添加到PATH行。还为PYTHONPATH插入一行,并将其设置为非标准的Python site-packages目录。例如,这是我的/ etc / environment:

$ PATH =“/ home / $(whoami)/ sys / bin:/ usr / local / sbin:/ usr / local / bin:/ usr / sbin:/ usr / bin:/ sbin:/ bin:/ usr / bin / X11:在/ usr /游戏”
$ PYTHONPATH = / home / $(whoami)/sys/lib/python2.4/site-packages

进行这些更改后,请务必注销并重新登录。

不要使用我上面提到的gitosis-init行进行标准安装,而是使用这个略微修改的代码:

$ sudo -H -u git env PATH = $ PATH gitosis-init </tmp/id_rsa.pub

确保在上述更新后的钩子中设置PYTHONPATH。

那个*应该这样做 我有目的地简化了这个非标准的设置,因为我认为没有很多人会使用它。如果您需要更多信息(我的nick是up_the_irons),请在FreeNode上的#git中打开我。

非标准SSH端口

如果您在服务器上的非标准端口上运行SSH,则有两种方法可以指定Git将尝试连接哪个端口。一个是明确声明您正在使用SSH协议,因为这可以让您在该URL中输入端口号:

git clone ssh://[email protected]:1234 / repo.git

或者你可以把它放在你的/ .ssh / config文件中:

$ Host myserver.com
$ Port 1234
  • [repo]块用于定义与gitweb一起使用的一些必要区域。
  • [组]块用于两者:
    • 定义用户组
    • 定义存储库权限
  • @用于定义用户组。

您应该提交并推送您在此文件中所做的任何更改。

keydir

keydir只是一个包含用户公钥的目录。一些键可以是user @ machine的形式,这些键必须用gitosis.conf中的那个格式定义。最好创建用户组并将其用作存储库的成员。一旦添加新的密钥来启用一些新用户,您应该将文件添加到Git存储库并提交并推送它们。新用户将使用上述格式的Git命令,就像您用来克隆gitosis-admin存储库一样。

gitweb

开启gitweb支持

gitweb是一个简单的可视化网页界面,可以使用任何兼容CGI的网页服务来运行,这里选用的Apache

  1. git clone git://git.kernel.org/pub/scm/git/git.git
  2. cd git/
  3. make GITWEB_PROJECTROOT="/home/git/repositories"\
  4. GITWEB_JS="gitweb/static/gitweb.js" \
  5. GITWEB_CSS="gitweb/static/gitweb.css" \
  6. GITWEB_LOGO="gitweb/static/git-logo.png" \
  7. GITWEB_FAVICON="gitweb/static/git-favicon.png" \
  8. bindir=/usr/local/bin \
  9. gitweb
  10. make gitwebdir=/var/www/cgi-bin/gitweb install-gitweb

需要注意的是GITWEB_PROJECTROOT应该修改成你的仓库的路径,并且其权限(包括子目录)应是705。

然后修改/etc/gitweb.conf,改成下面的样子

[plain] view plain copy

  1. $projectroot = "/home/git/repositories"; #仓库路径
  2. $GIT = "/usr/local/bin/git"; #git可执行文件路径

修改apache配置文件

在/etc/httpd/conf/httpd.conf中加入以下内容:

  1. <VirtualHost *:80>
  2. ServerName gitserver
  3. DocumentRoot /var/www/cgi-bin/gitweb
  4. <Directory /var/www/cgi-bin/gitweb>
  5. Options ExecCGI +FollowSymLinks +SymLinksIfOwnerMatch
  6. AllowOverride All
  7. order allow,deny
  8. Allow from all
  9. AddHandler cgi-script cgi
  10. DirectoryIndex gitweb.cgi
  11. </Directory>
  12. </VirtualHost>

这就弄好了!

可能遇到的问题

用户认证不通过的问题:

git clone [email protected]:gitosis-admin.git
Initialized empty Git repository in /home/yang/gitosis-admin/.git/
Agent admitted failure to sign using the key.
Permission denied (publickey).
fatal: The remote end hung up unexpectedly

// 解决方法,在管理员PC上 
# ssh-add   ~/.ssh/id_rsa

gitweb找不到工程的问题

如果遇到gieweb的页面显示找不到工程,多半是权限设置错误。

简单的说就是Apache用户组不具备访问你仓库目录的权限,例如我的仓库是放在/home/git/repositories下的,所以应将/home/git和/home/git/repositories以及你仓库中的所有项目的权限都设置成705,之前在网上发现有人说设置成775的,如果你设置成775的话虽然也能用,但会导致无法使用命令访问代码仓库,原因我还不清楚。

时间: 2024-11-12 12:46:34

私有git 搭建的相关文章

用腾讯云Gogs搭建私有git服务器

前言 经常有需要写不能公开代码的项目,所以只好自己搭建一个私人的git服务器 Gogs的好处在于比Gitlib轻量化了好多,而且是国人写的,官方主页也是中文的 Gogs首页 腾讯云服务器配置: Ubuntu16.04 LTS 腾讯云学生版1G内存 1Mbps 准备安装 环境是标准的LNM环境:(我之前为了学PHP就已经安装好啦) sudo apt install nginx mysql-server git 配置数据库 SET GLOBAL storage_engine = 'InnoDB';

Jenkins+私有git+Xcode打包ipa总结

借鉴博客: [手把手教你利用Jenkins持续集成iOS项目](http://www.jianshu.com/p/41ecb06ae95f) [Jenkins 总结 :Mac上git iOS 自动打包](http://www.jianshu.com/p/8d4452c6f17e) 前言: 最近需要研究Jenkins打包,网上的博客很多,但借鉴过程中难免出现不适合自己的情况,下面是我基于上述借鉴博客,经历一些坑之后使用Jenkins+私有git+Xcode环境打包ipa 安装 我这里的安装是去[官

jenkins + Git 搭建持续集成环境

jenkins + Git 搭建持续集成环境 持续集成通过自动化构建.自动化测试以及自动化部署加上较高的集成频率保证了开发系统中的问题能迅速被发现和修复,降低了集成失败的风险,使得系统在开发中始终保持在一个稳定健康的集成状态.jenkins是目前广泛应用的持续集成工具,本文记录我使用jenkins+Git配置持续集成环境的整个流程以及踩到的坑(jenkins过程的坑往往不是在第一次配置,而是在配置结束后更改某些配置项的时候踩到). 总体流程如下: tomcat8.0下载地址:http://tom

git - 搭建git仓库

1. 更新git版本: http://codelife.me/blog/2013/06/25/upgrade-git-on-centos-6-4/ 2. 建立git仓库: git init --bare myrepo.git    # 建立代码仓库 chgrp  -R git /opt/myrepo.git     # 更改属组 chmod g+rsw -R /opt/myrepo.git    # 给组 读写权限 #每次有人push后,设置 新文件的属组是 新属组git, echo “#!/b

ubuntu npm 私有库搭建 (npmjs.org 官方版本)

目标 npm.xxx.com 安装和推送nodejs包 npmui.xxx.com 管理已经推送的nodejs包 安装 couchdb https://launchpad.net/~couchdb/+archive/ubuntu/stable 里面有 14.10  14.04 和 12.04的   PPA地址 安装不在这里讨论 安装 couchdb 1.6.1 1.初始化 访问“http://localhost:5984/_utils/” 新建名字为  registry 库 异步 同步官方nod

git搭建服务器

搭建Git服务器 在远程仓库一节中,我们讲了远程仓库实际上和本地仓库没啥不同,纯粹为了7x24小时开机并交换大家的修改. GitHub就是一个免费托管开源代码的远程仓库.但是对于某些视源代码如生命的商业公司来说,既不想公开源代码,又舍不得给GitHub交保护费,那就只能自己搭建一台Git服务器作为私有仓库使用. 搭建Git服务器需要准备一台运行Linux的机器,强烈推荐用Ubuntu或Debian,这样,通过几条简单的apt命令就可以完成安装. 假设你已经有sudo权限的用户账号,下面,正式开始

Git搭建团队项目环境

序言 使用git有一段时间但是没有自己搭过项目.当我在网络查找问题时,搜到的同类文章大同小异,表述也不是很详细. 被push失败问题折腾了6个小时,于是完整决定记录一下,不尽完善,公自己和新手参考. 系统Mac OS X  Yosimite 10.10----------------------------------------------------------------------------------------------------- 一.项目中心仓库部分 中心仓库需要设为裸仓库

Jenkins+Maven+Git搭建持续集成和自动化部署的配置手记(1)

前言    持续集成这个概念已经成为软件开发的主流,可以更频繁的进行测试,尽早发现问题并提示.自动化部署就更不用说了,可以加快部署速度,并可以有效减少人为操作的失误.之前一直没有把这个做起来,最近的新项目正好有机会,费了一番功夫总算搞好了,特此记录. 1. 开发环境    我这边建立的标准开发环境如下:    1. Maven做项目管理:    2. Git做代码管理:    3. SpringMVC+Spring+Mybatis搭建的程序框架:    4. Mysql作为数据存储,Druid做

Linux中使用京东代码库JDCode创建私有Git仓库

国外Git经常被墙,所以目光转向国内.目前,云存储真的是很热,有很多公司在做. 看了一下,CSDN,开源中国,淘宝,京东,Gitcafe都在搞.淘宝只支持SVN. JD号称提供1G免费空间,而且支持私有仓库,所以就去试了试.https://code.jd.com/ 配置起来也比较简单,在网页上新建一个私有项目,之后会提供给你一个项目地址. 不过,私有项目要通过ssh登陆下载. 下面讲讲ssh的配置. 整个配置过程JDCode上面写的比较详细https://code.jd.com/articles