Как я могу разрешить анонимную передачу в git-репозиторий через http? - PullRequest
4 голосов
/ 20 августа 2011

Я не могу найти пример здесь: http://www.kernel.org/pub/software/scm/git/docs/git-http-backend.html

Возможно ли это?

Ответы [ 3 ]

5 голосов
/ 21 августа 2011

Добавьте это в ваш httpd.conf (при условии, что / srv / git содержит ваши репозитории)

<Directory "/usr/lib/git-core*">
    Order allow,deny
    Allow from all
</Directory>

SetEnv GIT_PROJECT_ROOT /srv/git
SetEnv GIT_HTTP_EXPORT_ALL
ScriptAlias /git/ /usr/lib/git-core/git-http-backend/

Затем убедитесь, что apache может писать в ваш каталог репозитория (изнутри репозитория запустите его, где http - ваш пользователь apache)

chown -R http .

В хранилище, которое вы создали на сервере, откройте .git / config и добавьте следующее

[http]
    receivepack = true

и, наконец, в корне хранилища запустите

git config --bool core.bare true

в качестве альтернативы, если вы хотите, чтобы файлы были доступны на сервере (для веб-сайта или чего-либо еще), игнорируйте приведенную выше команду и отредактируйте .git / config с помощью этого

[receive]
    denyCurrentBranch = false

и затем запустите это на сервере, когда вы хотите обновить каталог (должен быть лучший способ, поэтому, пожалуйста, дайте мне знать)

git reset --hard
3 голосов
/ 24 августа 2011

Анонимный просмотр и просмотр с помощью git-http-backend и gitweb

Обратите внимание, что DAV значительно медленнее, чем новая поддержка "smart-http", начиная с git 1.6.6. Новый метод позволяет передавать весь пакет сразу, а не как отдельные файлы.

Приведенная ниже настройка исключает необходимость настраиваемой конфигурации в каждом репо (http.receivepack) или необходимость полной перезагрузки. Просто сделайте каждый новый пере [po с

git --bare init --shared

Вы также можете использовать gitweb для предоставления просматриваемых URL-адресов в том же месте.

Примечание. Поскольку доступ контролируется Apache, вы можете добавить любые требования к аутентификации (htaccess или ldap и т. Д.) В настройку каждого репозитория.


Просто создайте новый файл git_support.conf и включите его в apache (добавьте оператор include в httpd.conf)

#
#  Basic setup for git-http-backend
#

SetEnv GIT_PROJECT_ROOT /opt/git_repos
SetEnv GIT_HTTP_EXPORT_ALL
SetEnv REMOTE_USER=$REDIRECT_REMOTE_USER  #IMportant !!! This could be your problem if missing

<Directory /opt/git>  # both http_backend and gitweb should be somewhere under here
        AllowOverride None
        Options +ExecCGI -Includes  #Important! Lets apache execute the script!
        Order allow,deny
        Allow from all
</Directory>

# This pattern matches git operations and passes them to http-backend
ScriptAliasMatch \
        "(?x)^/git/(.*/(HEAD | \
                        info/refs | \
                        objects/(info/[^/]+ | \
                                 [0-9a-f]{2}/[0-9a-f]{38} | \
                                 pack/pack-[0-9a-f]{40}\.(pack|idx)) | \
                        git-(upload|receive)-pack))$" \
        /opt/git/libexec/git-core/git-http-backend/$1

# Anything not matched above goes to displayable gitweb interface
ScriptAlias /git /opt/git/cgi-bin/gitweb.cgi/

Результатом является способность толкать / тянуть:

me@machine /tmp/eddies $ git pull
Already up-to-date.

me@machine /tmp/eddies $ touch changedFile

me@machine /tmp/eddies $ git add .

me@machine /tmp/eddies $ git commit -am"commiting change"
[master ca7f6ed] commiting change
 0 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 changedFile

me@machine /tmp/eddies $ git push origin master
Counting objects: 3, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (2/2), 239 bytes, done.
Total 2 (delta 1), reused 0 (delta 0)
To http://mysecretdomain.com/git/eddies
   0f626a9..ca7f6ed  master -> master

И вы можете просматривать эти изменения онлайн .. gitweb provides a browsable interface

Источник: http://repo.or.cz/w/alt-git.git?a=blob_plain;f=gitweb/README

2 голосов
/ 20 августа 2011

Только не добавляйте AuthType в конфигурацию Apache (поэтому нет элементов LocationMatch или Location).

Если у вас нет AuthType, это означает, что ваш Apache просто передаст ваш запрос git программе cgi git-http-backend.
Таким образом, в этом случае аутентификация не будет выполняться: анонимная отправка будет возможна.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...