使用用户名和密码进行身份验证的GIT服务器

我想建立一个GIT服务器,让我的开发人员使用用户名和密码登录,以便提交和修改项目。我还需要管理开发人员对项目的访问权限(我认为我应该使用gitolite来实现这一点)。 我该如何做到这一点? 我习惯于使用SVN,因为它很简单,你可以为每个开发人员设置用户名和密码,他们可以轻松地访问存储库,而不需要生成SSH密钥并将其放在服务器上。 谢谢
4个回答

或许你还不知道,但是Git是一种分布式版本控制系统。这对你的理解至关重要。另一方面,SVN和CVS是集中式的。在Git中,你仍然可以有一个中央仓库,如果你有的话,你的用户需要能够使用SSH或HTTP访问该服务器进行登录,请查阅相关资料。总体而言,Git依赖于服务器的身份验证。 因此,要在Debian或Ubuntu服务器上创建一个用于集中化使用的Git仓库:
# apt-get install git
# cd /var/git
# git init --bare myreponame.git
# adduser <username>    as needed

此时您有一个空的存储库。要将其克隆到您的桌面上(Debian或Ubuntu):

对于SSH连接:查找ssh keygen并设置无密码连接到您的服务器- keygen和共享只需两个命令。

要克隆存储库:

$ git clone <server>:/var/git/myreponame.git

$ cd myreponame
现在你可以添加文件和目录...当你使用git add和git commit之后,你可以使用git push将提交推送到中央仓库。
  • 有非裸仓库,你必须阅读相关资料,使用标准的Git参考文档,只需谷歌一下。
  • 警告:“共享仓库”并不是你想象中的那样。

我可能要补充一些关于使用文件系统权限和软链接来管理用户对仓库的访问权限的内容。就个人而言,我更喜欢在GitHub上进行PR流程,而不是自己内部管理,但很明显,OP不理解git的工作原理。 - RobotHumans

gitolite使用公钥身份验证,顺便说一下,你不需要生成每个人的密钥对。只需向他们索取公钥即可。 在gitolite中的配置只是另一个存储库,您只需要授予访问权限并相应地添加公钥。

我想搭建一个Git服务器,让我的开发人员可以使用用户名和密码登录,以便提交和更改项目。我还需要管理开发人员对项目的访问权限。 我建议使用GitLab Community Edition,因为它具备你所需的所有功能以及更多。 实际上,SSH密钥非常方便,因为你不需要每次都输入登录密码,只需克隆/拉取/推送等操作即可。 无论如何,使用GitLab,你可以同时使用登录密码和/或SSH密钥。

是的,我认为SSH密钥很方便,但对于没有使用过SSH密钥的Windows开发人员来说,可能会有些棘手。 - Giorgio
我在Debian Wheezy上使用deb软件包安装Gitlab时遇到了问题,我应该尝试手动安装。 - Giorgio
我已经在CentOS-6.5上成功安装并运行了GitLab,没有遇到任何问题。在我看来,手动安装是一个不好的主意,至少对于之前没有使用过GitLab的人来说。 - ALex_hha
我手动安装了它,它运行得很好。唯一的问题是内存消耗太大了,几乎达到了500MB! - Giorgio

如果您想通过SSH进行密码验证,并通过Gitolite进行授权,您可以轻松实现这一点。 基本上,您需要为每个用户创建一个帐户并将其放入一个组中,或者您可以对所有用户应用以下“Match”规则,并对那些应该能够实际登录的用户进行例外处理。在我的示例中,我假设您将所有git用户都放入名为“git-users”的组中,主机名为“git”,Gitolite作为用户“git”运行,并且Gitolite安装在“/opt/gitolite”目录下。如果有任何不符合实际情况的地方,请根据指示进行调整。 在“/etc/ssh/sshd_config”文件中,您将会看到以下内容:
Match Group git-users
    X11Forwarding no
    AllowTcpForwarding no
    AllowAgentForwarding no
    PermitTTY no
    ForceCommand sudo -u git -H /opt/gitolite/src/gitolite-shell $USER
为了让用户连接并告诉Gitilote是哪个用户要控制权限。 还有,要让这个sudo命令不需要密码,你需要使用visudo命令,并在sudoers文件中添加相应内容。
Defaults!/opt/gitolite/src/gitolite-shell       env_keep+=SSH_CONNECTION
Defaults!/opt/gitolite/src/gitolite-shell       env_keep+=SSH_ORIGINAL_COMMAND
为了使Gitolite正常运行,需要转发SSH_CONNECTIONSSH_ORIGINAL_COMMAND环境变量。
%git-users      git = (git) NOPASSWD: /opt/gitolite/src/gitolite-shell
为了让组中的每个用户git-users都可以在名为git的主机上以git用户的身份执行命令/opt/gitolite/src/gitolite-shell,而无需输入密码。

  • 相关问题