陈奇网络工作室

私有git构造

网站建设服务器

这里使用的操作系统是CentOSrelease5.9(最终版),已经安装了Git和一些必要的开发工具。

在服务器上创建用户和项目存储库。

Useraddgit#创建git用户

Passwdgit#设置密码

Sugit#切换到git用户

Cd~/#切换到主目录

git initbare cube #创建一个名为cube的项目仓库。

克隆项目并提交更改(本地)

Gitclonegit@IP地址:cube~/cube

需要注意的是,这里会需要用户git的密码,稍后建立主机信任后我们就不需要输入密码了。

然后在立方体下创建一个README.txt。

gitadd*

gitcommit-mcreatenewfile

gitpushoriginmaster

建立主机信任关系

本地执行

ssh-keygen-trsa

猫~/。ssh/id_rsa.pub

复制文件公钥内容

在服务器上执行

mkdir~/。嘘

chmod755~/。嘘

碰~/。ssh/授权密钥

chmod600~/。ssh/授权密钥

echo copy的公钥~/。ssh/授权密钥

注意文件权限的问题。

使用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-trsa

现在可以初始化管理资料档案库了。

$ sudo-H-ugitgitosis-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/gitosisgit

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

初始化管理存储库之后,禁用用户git基于口令的ssh登录可能是合理的。

为此,请添加

匹配用户git

密码验证号

在/etc/ssh/sshd_config的末尾。

配置

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

$ gitclonegit @ your . git . server:gitosis-admin . git

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

Gitosis.conf- Gitosis和存储库权限的配置文件。

Keydir-包含每个用户的公钥的目录。

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

存储库和权限

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

[胃肠道疾病]

gitweb=是

[repofoobar]

描述=foobar的Git仓库

所有者=用户

[小组开发者]

成员=用户1用户2

[群组管理员]

成员=用户1

[群组信息-管理]

writable=gitosis-admin

成员=@admins

[群组桌面]

Writeable=foobar

成员=@devs

[将我的团队分组]

可写=自由_猴子

成员=jdoe

[组部署者]

可写=自由_猴子

readonly=monkey_deployer

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

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

$gitcommit-a-m "允许jdoe对free_monkey进行写访问"

$gitpush

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

$mkdirfree_monkey

$cdfree_monkey

$gitinit

$ gittremoteaddorigingit @ YOUR _ SERVER _ HOSTNAME:free _ monkey . git

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

$ gitpushoriginmaster:参考/标题/主

使用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存储库的key dir/中。其次,编辑gitosis.conf并将其添加到成员列表中。

$ cdgitosis-管理

$cp/alice.pubkeydir/

$cp/bob.pubkeydir/

$ gitaddkeydir/Alice . pubkeydir/bob . pub

请注意,密钥文件名必须有一个“.”。pub”分机。

Gitosis.conf更改:

[将我的团队分组]

member=jdoealicebob

可写=自由_猴子

提交和推送:

$gitcommit-a-m "授予Alice和Bob授予FreeMonkey的权利"

$gitpush

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

$ gitclonegit @ YOUR _ SERVER _ HOSTNAME:free _ monkey . git

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

公共存取

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

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

$ sudo-ugitgit-daemon-base-path=/SRV/gitosis/repositories/-export-all

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

$ gitclonegit://YOUR _ SERVER _ HOSTNAME/free _ monkey . git

要只导出一些存储库而不导出其他的,您需要在要公开的每个存储库的根目录中触摸git-daemon-export-ok(例如/SRV/gitosis/repositories/free _ monkey . git)。然后从上面的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的默认路径。在Ubuntu上,这是/etc/environment。将Gitosis的路径添加到路径线上。还要为PYTHONPATH插入一行,并将其设置为非标准的Python站点包目录。例如,这是我的/etc/环境:

$ path="/home/$(whoami)/sys/bin:/usr/local/sbin:/usr/sbin:/sbin:/bin:/usr/bin/X11:in/usr/game "。

$ python path=/home/$(whoami)/sys/lib/python 2.4/site-packages

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

不要使用我上面提到的用于标准安装的gitosis-init行,而是使用以下稍微修改的代码:

$ sudo-H-ugitenvPATH=$ PATHgitosis-init/tmp/id _ RSA . pub

确保在上面更新的钩子中设置了PYTHONPATH。

那件事应该做。我特意简化了这个非标准设置,因为我觉得不会有很多人用。如果你需要更多信息(我的昵称是up_the_irons),请在FreeNode上的#git中打开我。

非标准SSH端口

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

基特克隆内什://git@myserver.com:1234/repo.git

或者你可以把它放在你的/。ssh/配置文件:

$Hostmyserver.com

$端口1234

[repo]块用于定义一些与gitweb一起使用的必要区域。

[组]块用于以下两种情况:

定义用户组

定义存储库权限

@用于定义用户组。

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

密钥目录

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

gitweb

打开gitweb支持

Gitweb是一个简单的可视化web界面,可以由任何CGI兼容的web服务运行。这里选择阿帕奇。

gitclonegit://git . kernel . org/pub/SCM/git/git . git

cdgit/

makeGITWEB _ project root=/home/git/repositories \ \ \ \

git web _ JS=git web/static/git web . JS \ \ \

git web _ CSS=git web/static/git web . CSS \ \ \ \

git web _ LOGO=git web/static/git-LOGO . png \ \ \ \

git web _ FAVICON=git web/static/git-FAVICON . png \ \ \ \

bindir=/usr/local/bin\\\

gitweb

makegitwebdir=/var/www/CGI-bin/git web install-git web

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

然后将/etc/gitweb.conf修改成这样。

[普通]查看普通副本

$ project root=/home/git/repositories;#仓库路径

$ GIT=/usr/local/bin/GIT;#git可执行文件路径

修改apache配置文件

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

虚拟主机*:80

服务器名称gitserver

document root/var/www/CGI-bin/git web

目录/var/www/cgi-bin/gitweb

选项ECC gi follow symlinks SymLinksIfOwnerMatch

AllowOverrideAll

订单允许,拒绝

Allowfromall

AddHandlercgi-scriptcgi

DirectoryIndexgitweb.cgi

/目录

/虚拟主机

搞定了!

可能的问题用户身份验证失败:

git克隆git@IP:gitosis-admin.git

在/home/yang/gitosis-admin/中初始化空的Git储存库。git/

代理承认未能使用密钥签名。

权限被拒绝(publickey)。

致命错误:远端意外挂断

//解决方案,在管理员PC上

# ssh-add ~/。ssh/id_rsa

Gitweb找不到项目的问题。

如果遇到gieweb的页面显示找不到项目,多半是因为权限设置不正确。

简单地说,Apache用户组不能访问您的仓库目录。比如我的仓库放在/home/git/repositories下,那么/home/git和/home/git/repositories以及你仓库中所有项目的权限都应该设置为705。在网上发现设置为775。如果设置为775,是可以的,但是会导致失败。

Svn迁移到git

http://blog.csdn.net/huaishu/article/details/41083951

更多关于云服务器,域名注册,虚拟主机的问题,请访问西部数码代理官网:www.chenqinet.cn。

相关推荐

后台-系统设置-扩展变量-手机广告位-内容页底部广告位3