Я новичок в GIT и в целом не очень разбираюсь в настройке инфраструктуры. Однако то, что я пытаюсь сделать, кажется очень простым, и я не могу это сделать.
Я пытаюсь создать сервер GIT, доступный через HTTPS в Apache. У меня следующая конфигурация моего репозитория 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. Однако у меня есть подозрение, что магия GIT в конфигурации Apache использует для моей фиксации какого-то другого пользователя (например, моего пользователя LDAP). Однако это не имеет смысла. Могу ли я изменять права доступа к файлам на каждом моем сервере каждый раз, когда появляется изменение в LDAP?
Есть ли какой-либо специальный пользователь git по умолчанию, который будет использоваться в такой конфигурации?
Я подтверждаю, что apache
пользователь и группа имеют полный контроль над моим репозиторием GIT.
Я смог настроить Git, чтобы он работал на меня.
Моя целевая конфигурация заключалась в настройке GIT для репозитория, ГЕРРИТ над ним для проверки кода и интегрировать все это с LDAP моей компании.
Вы можете видеть, что мне потребовалось почти 3 недели, чтобы все это запустить, но теперь я, наконец, получил все окончательно.
ГЕРРИТ был самой важной вехой - оказалось, что он сам обеспечивает нужную мне функциональность - он предоставляет http-интерфейс для репозитория, а затем использует одну системную учетную запись для выполнения фактических действий в репозитории.
GERRIT также прекрасно интегрируется с LDAP, что позволяет настраивать группы ldap для прав доступа к проекту и использовать пользователей LDAP для взаимодействия с репозиторием.
Единственная мелочь - это то, что для доступа к репозиториям нужно использовать пароль, сгенерированный GERRIT, с его пользователем LDAP. Однако это не является большим недостатком, поскольку вы входите в пользовательский интерфейс GERRIT, используя свои полные учетные данные LDAP, а затем можете сгенерировать этот пароль для себя, что означает, что вы полностью контролируете его.