我想设置一个 GIT 服务器,让我的开发人员使用用户名和密码登录,以便提交和更改项目。我还需要管理开发人员对项目的访问权限(我认为我应该为此使用 gitolite)。
我怎样才能做到这一点?
我习惯使用 SVN,它很方便,因为您可以为每个开发人员设置用户名和密码,这样就可以轻松访问存储库,而无需生成 ssh 密钥并将其放在服务器上。
谢谢
答案1
也许您不知道这一点,但 Git 是一个分布式 VCS。这对您的理解至关重要。另一方面,SVN 和 CVS 是集中式的。您仍然可以在 Git 中拥有一个中央存储库,如果您这样做,您的用户将需要能够使用 SSH 或 HTTP 访问登录该服务器并查找它。一般来说,Git 依赖于服务器的身份验证。
因此,要在 Debian 或 Ubuntu 服务器上创建一个 git repo 以供集中使用:
# apt-get install git
# cd /var/git
# git init --bare myreponame.git
# adduser <username> as needed
此时,您有一个空的存储库。要将其克隆到您的桌面 Debian 或 Ubuntu:
对于 SSH 连接:查找 ssh keygen 并与您的服务器建立无密码连接 - keygen 和共享只有两个命令。
要克隆 repo:
$ git clone <server>:/var/git/myreponame.git
$ cd myreponame
现在您可以添加文件和目录...当您使用 git add 和 git commit 后,您可以使用 git push 将提交推送到中央存储库。
- 有非裸存储库,您必须阅读此内容,使用标准 Git 参考,只需 Google 即可。
- 警告“共享存储库”并不是您从名称所想的那样。
答案2
gitolite
使用公钥认证,并且,FWIW,您不需要生成每个人的密钥对。只需向他们索要公钥即可。
中的配置gitolite
只是另一个存储库,您只需要授予访问权限并相应地添加公钥。
答案3
我想设置一个 GIT 服务器,让我的开发人员使用用户名和密码登录,以便提交和更改项目。我还需要管理开发人员对项目的访问权限
我建议使用 GitLab 社区版。因为它具有您需要的所有功能,甚至更多。
我习惯使用 SVN,它很方便,因为您可以为每个开发人员设置用户名和密码,这样就可以轻松访问存储库,而无需生成 ssh 密钥并将其放在服务器上。
实际上 ssh key 非常舒服,因为您不需要每次克隆/拉/推送/等时都输入登录名/密码。
无论如何,通过 gitlab 您都可以使用登录名/密码和/或 ssh 密钥。
答案4
如果您想要通过 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
如果有用户连接,则将控制权交给 Gitolite,并告诉它用户是哪个用户。
并且此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_CONNECTION
以及SSH_ORIGINAL_COMMAND
%git-users git = (git) NOPASSWD: /opt/gitolite/src/gitolite-shell
意思是让组中的每个用户都git-users
可以在名为git
user 的主机上执行git
无需指定密码的命令/opt/gitolite/src/gitolite-shell
。