天天看点

私有git 搭建在服务器上创建用户和项目仓库(repository)clone项目并提交修改(本地)建立主机信任关系可能遇到的问题

useradd git #创建git用户  

passwd git #设置密码  

su git #切换到git用户  

cd ~/ #切换到home目录  

git init --bare cube #创建一个叫cube的项目仓库 

git clone git@IP地址:cube ~/cube 

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

然后在cube下创建一个README.txt

git add *  

git commit -m "create new file"  

git push origin master

在本地执行

ssh-keygen -t rsa  

cat ~/.ssh/id_rsa.pub

拷贝文件公钥内容

在服务器执行

mkdir ~/.ssh  

chmod 755 ~/.ssh  

touch ~/.ssh/authorized_keys  

chmod 600 ~/.ssh/authorized_keys  

echo 拷贝的公钥 >> ~/.ssh/authorized_keys 

要注意文件权限的问题.

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

该<code>git</code>用户

<code>git</code>该用户所属的组

该<code>/srv/gitosis</code>目录将保存Gitosis的数据和存储库

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

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

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

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

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

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

要实现这一点,添加

在......的最后 <code>/etc/ssh/sshd_config</code>

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

在<code>gitosis-admin</code>存储库中,您将看到两件事:

<code>gitosis.conf</code> - Gitosis和存储库权限的配置文件

<code>keydir</code> - 包含每个用户公用密钥的目录

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

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

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

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

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

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

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

并重试最后一个命令

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

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

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

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

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

gitosis.conf更改:

提交和推送:

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

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

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

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

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

要仅导出一些存储库而不是其他存储库,您需要在要公开的每个存储库的根目录(例如/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可能导致这种情况。一定要解决这个问题:

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

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

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

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

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

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

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

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

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

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

[组]块用于两者:

定义用户组

定义存储库权限

@用于定义用户组。

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

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

gitweb

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

git clone git://git.kernel.org/pub/scm/git/git.git  

cd git/  

make GITWEB_PROJECTROOT="/home/git/repositories"\  

    GITWEB_JS="gitweb/static/gitweb.js" \  

    GITWEB_CSS="gitweb/static/gitweb.css" \  

    GITWEB_LOGO="gitweb/static/git-logo.png" \  

    GITWEB_FAVICON="gitweb/static/git-favicon.png" \  

    bindir=/usr/local/bin \  

    gitweb  

make gitwebdir=/var/www/cgi-bin/gitweb install-gitweb 

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

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

$projectroot = "/home/git/repositories"; #仓库路径  

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

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

&lt;VirtualHost *:80&gt;  

    ServerName gitserver  

    DocumentRoot /var/www/cgi-bin/gitweb  

    &lt;Directory /var/www/cgi-bin/gitweb&gt;  

        Options ExecCGI +FollowSymLinks +SymLinksIfOwnerMatch  

        AllowOverride All  

        order allow,deny  

        Allow from all  

        AddHandler cgi-script cgi  

        DirectoryIndex gitweb.cgi  

    &lt;/Directory&gt;  

&lt;/VirtualHost&gt;  

这就弄好了!

git clone git@IP: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 

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

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

svn 迁移到git

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

     本文转自yzy121403725 51CTO博客,原文链接:http://blog.51cto.com/lookingdream/1945807,如需转载请自行联系原作者