我对 GIT 还很陌生,总体来说对基础设施设置不是很有经验。但是,我尝试做的事情似乎非常基础,我无法做到。
我正在尝试在 Apache 中创建一个通过 HTTPS 公开的 GIT 服务器。我的 GIT 存储库的配置如下(在 CentOS 系统上):
SetEnv GIT_PROJECT_ROOT /opt/repo-git/my-custom-repo.git
SetEnv GIT_HTTP_EXPORT_ALL
ScriptAlias /git/ /usr/libexec/git-core/git-http-backend/
SetEnv REMOTE_USER=$REDIRECT_REMOTE_USER
<Directory "/opt/repo-git/my-custom-repo.git">
Options -Indexes FollowSymLinks
AllowOverride AuthConfig FileInfo
Order allow,deny
Allow from all
</Directory>
<Directory "/usr/libexec/git-core">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
<Location /git>
Order deny,allow
Allow from all
Dav on
AuthType Basic
AuthzLDAPAuthoritative on
AuthName "Trac"
Require valid-user
AuthBasicProvider ldap
AuthLDAPURL "ldap://my-ldap-configuration-that-works"
AuthLDAPBindDN "my-ldap-dn"
AuthLDAPBindPassword "my-password"
</Location>
通过此配置,我可以使用 签出代码git clone https://<my-ip>/git
。但是我无法推送,我在 TortoiseGit 中收到以下错误:
Counting objects: 3, done.
Writing objects: 100% (3/3), 207 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
remote: error: insufficient permission for adding an object to repository database ./objects
remote: fatal: failed to write object
error: unpack failed: unpack-objects abnormal exit
To https://<my-ip>/git
! [remote rejected] master -> master (unpacker error)
error: failed to push some refs to 'https://<my-ip>/git'
这些来源对我都没什么帮助——它们实际上提出的建议是相同的。我无法理解的是我应该为存储库设置哪个组和所有者。我目前正在设置apache
运行 Apache 服务器的用户。但是我怀疑 Apache 配置中的 GIT magic 使用其他用户进行我的提交(例如我的 LDAP 用户)。这毫无意义,但是,每次 LDAP 出现更改时,我是否都要更改我的每台服务器上的文件权限?
在这样的配置中是否有任何特殊的默认 git 用户可用?
我确认apache
用户和组对我的 GIT 存储库拥有完全控制权。
答案1
我能够让 Git 配置为我工作。
我的目标配置是为存储库设置 GIT,格里特对其进行代码审查并将所有这些与我公司的 LDAP 集成。
你可以看到我花了将近 3 周的时间才让一切运行起来,但现在我终于完成了。
格里特是最重要的里程碑——事实证明它本身提供了我需要的功能——它为存储库提供了 http 接口,然后使用一个系统帐户对存储库执行实际操作。
GERRIT 还与 LDAP 完美集成,允许您配置 ldap 组以获得项目访问权限,并使用 LDAP 用户进行存储库交互。
唯一的小问题是,用户需要使用 GERRIT 生成的密码作为 LDAP 用户才能访问存储库。不过,这并不是一个很大的缺点,因为您可以使用完整的 LDAP 凭据登录 GERRIT UI,然后可以为自己生成此密码,这意味着您可以完全控制它。