монтирование репозитория git http с использованием davfs

#apache #svn #git

#апач #svn #мерзавец #apache #git

Вопрос:

Я пытаюсь преобразовать некоторые работающие проекты из subversion в git. Проекты представляют собой веб-сайты, и наша текущая настройка subversion использует davfs для монтирования репозитория и указания там корневого каталога документов apache. Таким образом, apache в dev запускает код, проверенный в данный момент, в репозиторий svn.

монтировать:

 mount.davfs http://code.repository/svn/site.com /mnt/davfs/site.com
  

httpd.conf:

 ServerName site.com  
DocumentRoot /mnt/davfs/site.com
  

Я ищу способ имитировать эту настройку с помощью git. Но, насколько я понимаю, монтирование репозитория git (да, доступ к нашему репозиторию git осуществляется через http) таким образом приведет к тому, что внутренние компоненты репозитория git будут отображаться как docroot, а не сам код.
пример:

 ls /mnt/davfs/gitrepository

Parent Directory
HEAD
branches/
config
description
hooks/
info/
objects/
refs/
  

Кто-нибудь знает, есть ли способ добиться желаемого эффекта?

Спасибо!

Комментарии:

1. Спасибо, Amber и sehe. Я мог выбрать только один «правильный» ответ, и поскольку, вероятно, я буду использовать ответ Amber, я выбрал его.

Ответ №1:

Если вы хотите иметь возможность просматривать код, вы должны использовать что-то вроде gitweb. Если вы хотите выполнить push / pull из репозитория, то внутренние компоненты должны отображаться как docroot.

В голом репозитории (таком, который вы бы использовали для такого центрального репозитория, поскольку обычно вы не хотите переходить к не голым репозиториям) фактическая проверка файлов кода на диске отсутствует, единственными элементами в этом голом репозитории являются «git internals».

Если вы хотите получить копию кода на сервере из репозитория, вы, вероятно, захотите использовать git archive — возможно, в перехватчике после получения, если вы хотите, чтобы он запускался каждый раз, когда новый код загружается в репозиторий. Смотрите следующие справочные страницы для получения подробной информации:

http://www.kernel.org/pub/software/scm/git/docs/git-archive.html

http://git-scm.com/docs/githooks

Комментарии:

1. На самом деле я не хочу ни того, ни другого. Мне нужно, чтобы код в репозитории отображался как каталог в / mnt / davfs / gitrepository, чтобы я мог указать там корень документа apache и заставить его видеть это, как если бы это была любая другая файловая система. Мне нужно, чтобы он обновлялся при автоматическом изменении кода, как это происходит с davfs / svn, вместо того, чтобы каждую минуту запускать cron ‘git pull’.

2. Что вам на самом деле нужно, так это перехват после получения в репозитории сервера, который запускает git archive для экспорта содержимого репозитория в каталог всякий раз, когда запускается новый код. Смотрите справочную страницу для git-archive .

3. Проблема в том, что репозиторий git находится на другом компьютере. Он доступен только через http. Я не могу экспортировать файлы из репозитория на веб-сервер.

4. Тогда вы вроде как застряли. Возможно, вы могли бы экспортировать файлы в каталог на компьютере репозитория, а затем смонтировать этот отдельный каталог через DAV?

5. Возможно, это могло бы сработать. Что-то вроде перехвата после получения, чтобы экспортировать основную ветку в другой каталог, а затем как-то смонтировать это? На самом деле, я мог бы заставить системных администраторов смонтировать наш файловый сервер на узле репозитория git, а затем я мог бы экспортировать туда код и смонтировать его как docroot.

Ответ №2:

Ну, репозиторий git еще один зверь. Если вы хотите просмотреть исходный код, вам нужно что-то вроде gitweb. Имейте в виду, если бы вы просто указали на репозиторий svn, вы бы тоже смотрели на внутренние компоненты; /mnt/davfs /site.com, вероятно, размещен с apache mod-dav-svn, который делает что-то похожее на gitweb.

Вы захотите взглянуть на gitweb или competition. Gitweb, ИМХО, самый простой в настройке

https://git.wiki.kernel.org/index.php/Gitweb

Для совместного использования вашего репозитория (например, чтобы сделать его клонируемым) просто используйте дерево в качестве статических HTTP-страниц (напрямую как docroot), потому что davfs в любом случае (надежно) не позволит другим пользователям переходить к вашему репозиторию.

Передача данных будет выполняться с помощью интеллектуального HTTP-сервера, git-daemon или по ssh

Комментарии:

1. Спасибо, но я не хочу просматривать репозиторий. Мне нужно, чтобы apache видел код так, как если бы он находился на диске. Допустим, у меня есть WordPress в моем репозитории git. Мне нужен корень документа apache, чтобы просматривать файлы WordPress и запускать их как wordpress, а не отображать их пользователю.

2. @spuriousdata: тогда вам действительно нужно иметь рабочее дерево, а не репозиторий. Лучше всего использовать Cron pull или настроить репозиторий на автоматическое обновление рабочего дерева после извлечения: Git FAQ

3. Хорошо, итак, да, вы правы, что репозиторий svn работает под управлением mod_dav_svn, и да, этот веб-сервер отображает файлы напрямую, без ‘cruft’. Итак, я понимаю, что вы говорите о том, чтобы заставить gitweb обслуживать статические http-страницы, я думаю, это, вероятно, сделало бы то, что мне нужно. Проблема, однако, в том, что я ничего не могу установить на сервере репозитория git (я работаю в ОГРОМНОЙ компании с БОЛЬШИМ КОЛИЧЕСТВОМ бюрократии). Вы хотите сказать, что другого способа действительно нет? Спасибо.

4. @spuriousdata: Мой другой комментарий был за 6 минут до вашего последнего комментария… Я предлагаю вам прочитать ЭТО. ( Нет, я вообще не предлагаю использовать gitweb для этой цели. Даже использование davfs / mod-dav-svn было (очень?!) не рекомендуется по той же причине. — вам нужно рабочее дерево, которое обновляется. Точка. Зачем все усложнять?)

5. Ответ на ваш вопрос таков: Потому что я не устанавливаю правила.