Git - я правильно его использую? - PullRequest
3 голосов
/ 29 декабря 2011

Я недавно пытался настроить git, и я столкнулся со многими проблемами, которые трудно найти решения онлайн, что привело меня к мысли, что я могу неправильно понять что-то об использовании Git.

Сценарий

Основной сайт работает на компьютере с Ubuntu, и у меня также есть настроенный тестовый сервер, который почти дублирует работающий сервер.В настоящее время два разработчика работают на ПК.Я хочу создать удаленный репозиторий на тестовом сервере, на который оба разработчика могут перейти, а затем протестировать свои изменения на веб-сайте в обычном режиме (через браузер).До сих пор я установил локальный репозиторий и установил Git GUI;единственная информация, которую я смог найти для настройки удаленного репо (которую мы можем нажать) использует:

git init --bare

Я не могу найти информацию о том, как «извлечь» (<- чтоправильное слово для этого) репо в его структуре каталогов php, так что меня можно использовать через веб-браузер. </p>

Мои вопросы

1) Могу ли яделать это правильно?Если нет, то, что я неправильно понимаю, и как мне решить эту проблему?

ИЛИ 2) Если я делаю это правильно, что мне нужно сделать, чтобы «извлечь» репо?

Заранее спасибо!

Ответы [ 3 ]

3 голосов
/ 29 декабря 2011

Похоже, вы сделали это на полпути. Да, вы создаете новый репозиторий на сервере, но это не то место, где живет живой сайт. Процесс использования git для управления веб-сайтом (php или любым другим) хорошо описан здесь .

Создайте хранилище концентратора на сервере:

$ mkdir website.git && cd website.git
$ git init --bare
Initialized empty Git repository in /home/YOU/website.git/

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

$ mkdir /var/www/www.example.org
$ cat > hooks/post-receive
#!/bin/sh
GIT_WORK_TREE=/var/www/www.example.org git checkout -f
$ chmod +x hooks/post-receive

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

git remote add website ssh://home/YOU/website.git/
git push website +master:refs/heads/master

когда вы изменяете вещи локально и загружаете изменения, выполните

git push website

Второй разработчик должен просто клонировать удаленный репозиторий для локальной работы.

git clone ssh://home/YOU/website.git/

Конечно, ваши разработчики захотят синхронизировать свои репозитории. Если на главном сервере произошли новые изменения из-за активности другого разработчика, загрузка не удастся, поэтому разработчик должен извлечь последнюю версию и разрешить все конфликты слияния и повторить попытку.

Edit:

Вот другой учебник , который использует немного другой подход. Вместо того, чтобы проверять рабочее дерево в вашем DocumentRoot с помощью ловушки post-receive, он устанавливает «главный» репозиторий в DocumentRoot и извлекает изменения из репозитория «hub» после ловушки после обновления, и он использует ловушка post-commit, чтобы убедиться, что «концентратор» остается синхронизированным в случае внесения каких-либо изменений на работающий сервер.

git workflow overview

1 голос
/ 29 декабря 2011

В своей настройке git я делаю следующее:

git --bare init

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

Я думаю, вы можете использовать архив git для «извлечения» / экспорта содержимого вашегорепозиторий.Пустой репозиторий будет содержать только каталог .git репозитория, поэтому вы должны использовать архив, чтобы вывести свои вещи.

То, что вы также можете сделать, это просто клонировать пустой репозиторий туда, где вы хотите, чтобы он был, напримерваш каталог php.Тогда у вас есть все файлы и вы можете извлечь изменения из вашего хранилища.

0 голосов
/ 29 декабря 2011

Для работы с удаленным репозиторием я настоятельно рекомендую http://book.git -scm.com / 3_distributed_workflows.html . В вашем случае темы Публичные репозитории git и Выдача изменений в публичный репозиторий .

Что касается извлечения (вы можете иметь в виду «развертывание»), оно не поддерживается git - «глупым трекером контента». Самое простое решение вашей проблемы - просто вставить символическую ссылку ln -s в ваш репозиторий git, откуда вы хотите извлечь свой проект. Это потребует от вашего исходного кода поддержки структуры каталогов реального проекта.

Если вы используете решение symlink, предполагая, что ваш репо находится в ~/project, и вы хотите обслуживать свой проект с ~/public_html:

$ cd ~/public_html
$ ln -s ../project .
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...