Назад | Перейти на главную страницу

Каковы шаги по настройке git-http-backend с Apache в Windows?

Я хотел бы настроить сервер Git, используя Подход "Smart-HTTP". Однако мне трудно заставить его работать в Windows, и я новичок в Apache. Мой httpd.conf, в частности:

SetEnv GIT_PROJECT_ROOT "d:/repositories"
SetEnv GIT_HTTP_EXPORT_ALL
ScriptAlias /git/ "C:/Program Files/Git/libexec/git-core/git-http-backend.exe"

<VirtualHost 172.16.0.5:80>
    <LocationMatch "^/git/.*/git-receive-pack$">
            AuthType Basic
            AuthName "Git Access"
            Require group committers
    </LocationMatch>
</VirtualHost>

Может ли кто-нибудь предоставить инструкции по настройке сервера Git с использованием git-http-backend в Windows?

Есть несколько небольших деталей, чтобы заставить это работать в Windows, но мне удалось это сделать со следующей конфигурацией:

SetEnv GIT_PROJECT_ROOT d:/Export/GIT/
SetEnv GIT_HTTP_EXPORT_ALL
ScriptAlias /git/ "C:/Progra~1/Git/libexec/git-core/git-http-backend.exe/"

<Directory "C:/Program Files/Git/libexec/git-core/">
  Options +ExecCGI
  Allow From All
</Directory>

Я настоятельно рекомендую посмотреть журналы apache и средство просмотра событий, чтобы узнать, что не так.

Например,

  • libiconv.dll не найти. В Windows файлы DLL должны существовать в $PATH, или в той же папке, что и .exe файл. Самое простое решение - скопировать файл.
  • В Apache необходимо установить разрешения для запуска исполняемого файла (ExecCGI вариант).

Теперь, чтобы продолжить отладку, вот несколько советов.

Самый простой способ отслеживать журналы apache - открыть оболочку «Git bash» и выполнить следующую команду:

tail -f /c/Program\ Files/Apache\ Software\ Foundation/Apache2.2/logs/{access,error}.log &

Вы можете ввести эту команду и путь, используя завершение TAB, и нажать 2 раза TAB, чтобы получить список предложений. В & в конце превращает его в фоновый процесс. Каждый раз, когда вы делаете запрос или перезапускаете apache, новые строки журнала будут прокручиваться на вашем экране.

В tail процесс можно остановить, используя:

jobs         # See the background jobs
kill %1      # Kill the specific process

или:

fg           # Bring the first job in the foreground
Ctrl+C       # Kill the foreground process

Не пытайтесь открыть URL-адрес git в своем браузере, это не сработает. Вместо этого в той же оболочке GIT Bash запустите git clone команда. например.:

git clone http://localhost/git/somefolder.git

... и вы увидите, как прокручиваются журналы, указывая, где что-то пошло не так.


Поскольку git-http-backend не предоставляет интерфейс HTML, я искренне рекомендую gitphp для этого (обратите внимание, что есть несколько проектов, которые называются почти одинаковыми). Его легко настроить и создать с учетом поддержки msysGit. Это должно дать вам удобный веб-интерфейс для просмотра всех доступных репозиториев.

У меня возникают проблемы с пробелами в папке git, их лучше избегать.

Для клонирования URL-адреса HTTP требуется как минимум msysGit 1.7.1, если вы хотите запоминать пароли. Пароли можно хранить в _netrc файл в папке вашего профиля (%USERPROFILE%) со следующим макетом:

machine git.mydomain.com login MyAccount password MyPassword

В качестве альтернативы вы можете указать учетные данные в URL-адресе клона, но это сломает подмодули.


Сноска: если ваш сервер также поддерживает IIS 7 и .NET 4, вы также можете посмотреть http://www.jeremyskinner.co.uk/2010/06/25/hosting-a-git-server-under-iis7-on-windows/ или http://github.com/yysun/Git-Web-Access Эти проекты предоставляют HTTP-бэкэнд для Git на основе .NET. Я не смог использовать эти инструменты, потому что на сервере все еще работает Windows 2003.

<comment_to_the_question>

Мне трудно заставить его работать в Windows

  1. Какие трудности?
  2. "в Windows" значит из GNU / Linux нормально работает?

Вы также должны приложить журналы apache и git, версия git чтобы упростить отслеживание проблемы.

</comment_to_the_question>

На первый взгляд, конфигурационный файл мне подходит. Попробуйте удалить требование аутентификации и сначала проверьте без него.