2015-03-18 4 views
2

Мы используем Git для синхронизации наших серверов (dev и live) с нашими машинами разработки. Разработчики загружают через SFTP на сервер dev для проверки функций и изменений. Затем, когда все будет завершено, оно будет завершено и, наконец, втянуто в репозиторий Git.Проблемы с загрузкой по FTP

Проблема заключается в том, что

git commit -a -m 'Message' # on local machine 
git push origin master  # on local machine 
git pull origin master  # on server 

на сервере почти всегда не просто объединять файлы, удалять или игнорировать неотслеживаемые них. Он думает, что есть изменения и советы, чтобы их совершить, но, конечно, мы этого не хотим! Например, после следующих шагов очистки и сброса остаются две незатребованные папки, которые мы добавим ?!

Мы пытались

git reset --hard HEAD 
git clean -f 
git fetch 

И прочитал много руководств GIT. Но это не работает, как это было с

svn up --force 

Я посоветовал синхронизировать сервера время от времени, не может быть несоответствие, прерванной загрузки и т.д. Что не так? Разве мы не можем работать с Git таким образом? Это большая работа по очистке каталогов серверов все время.

Редактировать: Я должен добавить, что мы не можем тестировать локально, поскольку веб-приложение сильно зависит от домена и требует сложной настройки (Solr).

Будет ли это лучше через общий ресурс NFS вместо FTP?

ответ

0

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

мы очень эффективно использовать эту установку:

  • GIT репо сидит на тестовом сервере (не в веб-папке рабочего).

  • Разработчики берут на себя обязательства по реестру git на любой отрасли, на которой они работают.

  • Если ветвь фиксации является основной, мы используем post-receive hook, чтобы заставить тестовый сервер вытащить последние изменения в рабочую веб-папку.

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

Это называется «push-to-deploy» и работает очень хорошо.

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

Редактировать: heres хороший ответ о том, как это сделать. Это связано с node.js, но принципы одинаковы.

+0

Вы сказали, что разработчики загружают в другую папку, чем репо. Но как вы затем синхронизируете обе папки?На реальном сервере не будет загрузки, просто git pull. которые должны работать. Проблема - это только тестовый/dev-сервер. – Corni

+0

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

+0

Хорошо. До сих пор мы не используем филиалы. Я действительно не понимаю, зачем нам нужен собственный скрипт, чтобы делать то, что мы хотим. Git должен быть в состоянии сделать это из коробки, как это сделал SVN? – Corni

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