Как настроить Git для работы на локальном сервере?
Здравствуйте уважаемые сообщники.
Давно хотел поставить и настроить систему контроля версий для своего проекта.
Дано
Есть две локальные машины в одной сети. За одной работает программер, за другой фронт-енд (я). У каждого на машине стоит локальная версия сайта. Каждый выполняет свои задачи, но часто бывает так, что при работе с файлами программер и я можем редактировать один и тот же файл (например файл стилей). Программер работает на машине под операционной системе Виндовс. Я на Маке.
После того как мной проводятся какие-либо изменения в проекте (например где-то подправил стили или верстку), я отдаю эти файлы программеру и он сливает их со своей копией. Если изменения производил программер - он дает их мне и я сливаю их со своей копией. Сверять их вручную, выискивать файлы которые были изменения не очень удобно. Слышал, что подобную задачу гораздо легче решать используя систему контроля версий. В частности очень много слышал про Гит.
Гит-хаб не устраивает по определению. Хранить файлы где-то на сервере - не вариант. Файлы должны храниться локально.
Что нужно
У каждого из разработчиков должна быть своя локальная (рабочая) копия, в которой производятся текущие изменения. После того как изменения сделаны, они публикуются в главный репозиторий (тоже локальный). Дальше с него фалы будут попадать на сервер в сети.
Читал в сети о том, что подобное решение можно делать при помощи Гит и Дропбокс. Этот вариант вполне бы устроил. Плюс необходимо, что бы управление этими задачами производилось с помощью графического интерфейса, а не командной строки (прошу тут особо не фукать, просто это одно из условий).
Что делалось
Я поставил Гит на маке. Поставил Tower (GUI для Гита под Мак). Создал локальный репозиторий в папке Дропбокса. Вроде оно даже следит за изменениями в этих файлах. Но! Получается так, что сами файлы сайта лежат только в одном месте (в этой папке дропбокса), а мне нужно, чтобы было три копии (одна у меня, одна у программера и одна для главного/чистового репозитория).
Вопрос
Как сделать так, чтобы у каждого из участников была своя копия сайта? Подойдет ли вообще для этого Гит? Где в сети можно найти подробную инструкцию для решения моей задачи? Что я делаю не так? Или я вообще многого хочу?
Надеюсь, что я понятно описал свою задачу и кто-то сможет помочь полезным советом в моем вопросе. Заранее большое всем спасибо.
UPD
Вопрос решился кардинальным образом. Гит не подошел. Использую Mercurial. Для работы с репозиторием есть неплохой графический кросплатформенный интерфейс Sourcetree (к стати с Гитом тоже позволяет работать).
Git идеально подходит для этих целей.
Но для него нужен третий репозиторий, через который вы будете синхронизироваться.
И, возможно, четвёртый репозиторий, где будет храниться последняя рабочая (а не разрабатываемая) версия, котрая гдето выложена.
Берите мануал по git и изучайте.
Есть вариант без дополнительных репозиториев, например, mercurial, или крепкожопо настроенный git. В такий схеме репозитории синхронизируются между собой.
Но при этом автоматичски порождаются дополнительные ветки (головы) в каждом репозитории, которые могут привести к путанице быстрее, чем разобраться со схемой нормальной работы.
Спасибо большое, что откликнулись. Мне как раз и нужно несколько репозиториев. Но как их сделать ума не приложу. В приложении Tower2 есть функция клонировать репозиторий, но она почему-то подразумевает клонирование только с удаленного репозитория где-то на сервере. Почему нельзя сделать клон локального репозитория я не пойму
Т.е. через терминал сделать локальную копию для репозитория возможно? В результате такого клона репозитория получается, например, две папки "Сайт" в которых хранятся файлы сайта?
В результате клоне репозитория получится две копии репозитория.
И у одной из них установится remote ссылка на другую, если всё правильно сделать, связь с origin/master.
Но сейчас я уже склонен посоветовать вам вообще не работать с git.
@qmax на вкус и цвет :)
Мне кажется тут дело привычки. Я пользовался svn, после него сразу перешёл на git, и последний показался проще, даже без GUI. Потом пытался пользоваться mercurial и понял, что больше ничем не хочу пользоваться кроме как гитом :)
@zBit git функциональнее и удобне, но никак не проще.
Дело не во вкусе и цвете, а в количестве сущностей и взаимосвязей между ними.
Если нету remote - всё сразу становится проще в два раза.
Гит-хаб не устраивает по определению. Хранить файлы где-то на сервере - не вариант. Файлы должны храниться локально.
Вы видимо не знаете как работает GIT. Файлы будут храниться и на сервере и локально. То есть когда вы делаете git clone вы делаете локальную копию репозитория. Полную. со всеми версиями файлов. удаленный репозиторий по большому счету используется для синхронизации между разработчиками. Локально же вы вольны делать что хотите. Есть дополнительный профит. Имея 3 копии репозитория вы всегда сможете все восстановить, так как вероятность что навернется и сервер и оба компа с локальными ничтожно мала.
Так что варианты: заплатить 5 баксов за аккаунт на гитхабе или завести оный на битбаките. Либо тяните жребий у кого развернуть gitlab либо развернуть его где-то еще.
спасибо, что откликнулись. А что Гит не позволяет хранить несколько копий файлов проекта? Может есть другие альтернативы позволяющие это делать. СВН например?
Имеется в виду то, что файлы есть и у программера и меня. Например: весь сайт состоит из трех файлов (index.html, page1.html и page2.html). У меня на компе есть папка "Сайт" с этими тремя файлами в которых проводятся изменения, у программера на компе есть папка "Сайт" с этими тремя файлами в которых проводятся изменения. Плюс есть еще одна папка "Сайт" у него или у меня на компе, куда уже попадают конечные версии этих обработанных файлов для дальнейшей отправки на паблик.
Установите gitlab на локальном сервере. Используйте гит на своих компьютерах для работы с ним.
Могу помочь всё установить и настроить (на коммерческой основе), полностью под ключ с нуля сделать Вам сервер для веб разработки. Если будете сами делать, готов помочь решить проблемы бесплатно, которые возникнут в процессе, если возникнут.
Ой спасибо. В том то и дело, что я хочу сам научиться это настраивать. Я не мойму почему нельзя сделать клоны репозиториев. В Tower2 под Мак вроде и есть такая функция, но она подразумевает клонирование только с удаленного репозитория где-то на сервере. Почему нельзя сделать клон локального репозитория я не пойму
Почему нельзя, можно. Git децентрализован на самом деле, клонируя проект себе, вы выкачиваете всю инфу, что есть на сервере. Кто-то может выкачать от Вас то же самое. Почитайте git-scm.com/book он на русском есть. Gitlab - бесплатный аналог гитхаба если что, если Вы работали с гитхабом, может это будет удобным решением.
@butteff не всю. На самом деле там дефолтная глубина есть и она равна не дуотригинтиллиону. Для того, чтобы работало "без сервера" нужно bare репу создавать. Вот там будет вообще все объекты/диффы храниться.
Git flow вам в помощь
И "голые" репозитории
А вообще вы не правильно используете git. Зачем там дропбокс вообще не понятно...
Делаете "голый" репозиторий на каком-то своём сервере. Настраиваете доступ к нему по ssh для нужных пользователей или от одного пользователя, например от git. Далее клонируете эту репу себе и ваш прогер клонирует репу себе. Итого у нас 3 репы: на серваке, у вас и у вашего прогера.
Далее делаете изменения и перед пушем не забываете делать пулл и разрешать конфликты.
Кто последний мержит - тот и решает конфликты.
А вообще, лучше использовать git flow. Не знаю как у вас в гуйной утилитке, но вообще такой инструмент есть (тупо скрипты). С ними удобнее релизить и ветки более структурированный вид принимают.