2012-05-08 3 views
4

я все больше и больше в Git и должны выпрямить это один из,Должен ли я не помещать git-хранилище в «htdocs»?

Я где-то читал, что это плохая практика безопасности поставить .git репо внутри папки, которые могут быть доступны корыто веб (звучит разумно!).

Мой вопрос, кроме того, если он правилен, что является лучшим решением для этого? Проблема возникает, в основном, конечно, если вы работаете на удаленном хосте при веб-разработке.

Например, если я работаю над domain.com/project, где «project» - это репозиторий, что я могу сделать?

Возможно ли переместить папку .git где-то вне htdocs и ссылку на нее? Или я могу добавить к нему некоторый уровень защиты?

Я в основном развиваюсь на общем хосте, поэтому я ограничен тем, что я могу установить и настроить.

I'v читать, чем вы можете хранить все хранилище/папку где-то скрытое на сервере, а затем установить сценарий для копирования содержимого при нажатии на него.

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

Am i clear?

Помогите оценить!

+0

Вы должны пересмотреть коммиттера стратегию: особенно в GIT фиксаций должны быть очень маленькими и частыми. Таким образом, вы должны совершать больше и не оставлять без изменений свои изменения, чтобы жить. Возможным решением является использование двух ветвей (например, master и stable), другое - явно экспортировать конкретный commit/branch/tag (см. Мой ответ). – dtech

ответ

3

В прошлом, я сделал это:

project/ 
    .git/ 
    README,etc 
    public/ 
    index.html 

Затем вы делаете общественность/подкаталог мир видимый, но скрыть родительский проект/каталог. Вы можете либо сделать это с символической ссылкой, либо с помощью правильных заклинаний .htaccess.

+0

Звучит неплохо. Поскольку я могу управлять папками для каждого домена на мой общий хост, я всегда могу создать поддомен для каждого репо и иметь корневую папку доменов project/public :) – jonas

0

Я вижу два основных решения вашей проблемы, которые по-прежнему достаточно просты (в отличие от сценария копирования).

Прежде всего, у вас есть доступный каталог http://example.com/ в чем-то вроде /var/www/example-com/ и у вас есть каталог git, расположенный в /var/www/.git. Это работает только в том случае, если ваш хост имеет только example-com в каталоге /var/www/ (или, по крайней мере, ни один из других v-серверов не нуждается в репозитории git. Вы можете обойти это, если вы можете сообщить администратору переместить ваш корневой каталог на /var/www/example-com/site, что файлы непосредственно в /var/www/example-com недоступны.

другой бы, чтобы запретить доступ к каталогу .git, либо через .htaccess, или, если это невозможно, с помощью различных пользователей. Если сервер работает как www-data с основной группой www-data и ваше имя: me, вы можете указать свой корневой каталог me:www-data и установить групповые привилегии в r-S, что означает, что все члены группы www-data могут быть прочитаны, могут быть выполнены каталоги (и только каталоги), а бит группы - липкий. Затем введите свой каталог .git просто rwx------ или назначьте его своей группе.

2

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

GIT_DIR 

    If the GIT_DIR environment variable is set then it specifies a path to use instead of the 
    default .git for the base of the repository. 
+0

Наверное, хорошее решение, обратите внимание, что это нарушит скрипты или инструменты, которые не уважают переменную (т. е. имеют. git hardcoded) – dtech

+1

@dtech извините, но ваша точка полностью недействительна, это как сказать «не используйте стандарты w3g, потому что браузеры не соответствуют им на 100%» – KurzedMetal

+0

Это больше похоже: не используйте этот элемент HTML5 даже через W3C одобряет его, IE еще не поддерживает его. – dtech

0

Мой ответ предполагает, что вы используете apache на debian, но он тривиально адаптируется для других дистрибутивов и серверов.

У вас есть две возможности:

1: Создание символической ссылки на репозиторий

Теперь вы можете создать символическую ссылку из папки public_html в вашу рабочую копию. Например. что ваш ВХост конфигурация ставит DocumentRoot в «/ варе/WWW/сайте/public_html», вы можете симлинка это ваш мерзавец рабочей копию:

ln -s /var/git/site/html /var/www/site/public_html 

Или если вы просто хотите сделать вложенную доступную для:

ln -s /var/git/site/feature/ /var/www/site/public_html/feature 

Это будет по-прежнему оставляют некоторые .git файлов подъезд, так что вам придется изменить .htaccess или виртуальные хосты файлы, чтобы сделать их недоступными

2: Экспорт вашего хранилище

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

git archive master | tar -x -C /var/www/site/public_html 

Здесь вы можете заменить мастер любым из принятых деревьев иш структур (например, ветвь, фиксации или тег)

Смежные вопросы