网站建设服务器
这里使用的操作系统是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。