В конце этой стены текста действительно стоит вопрос. Это просто требует настройки, чтобы добраться до. Я ценю ваше отношение ко мне.
У меня есть проект, которым я занимаюсь, вместе с двумя другими разработчиками. Когда-то рано, но на самом деле не в начале текущей фазы разработки, мы заинтересовались git.
Я импортировал рабочий каталог SVN в git. Мы втроем работали над функциями, которые будут развернуты по порядку (по прозвищу «промо», затем «карта», затем «опрос»). Так что, не зная, что лучше, я разветвлял «карту» от «мастера» и «обзор» от «карты». Я бы сделал это по-другому, но несколько месяцев назад я так и сделал.
Разработчик, работавший над «первым» проектом, «промо», продолжал работать в SVN, и я вручную поддерживал синхронизацию главной ветви с его изменениями, периодически объединяя их через ветви функций. Выглядело это так:
* ------- master (in sync with svn and containing work for "promo")
\*------- dev/map
\*------ dev/survey
Итак, на прошлой неделе "промо" заработало, а вчерашняя "карта" вышла в свет, и все это было готово к некоторой очистке.
Методология рабочей загрузки заключалась в том, что я сделал git diff --stat master..dev/map
, чтобы найти все измененные файлы, и вручную отправил их по FTP на рабочий сервер.
Как только это было проверено и принято, я пошел:
git checkout master
git merge dev/map
git branch -d dev/map
Так что теперь master представляет то, что находится как на промежуточном сервере, так и на сервере разработки. Тогда:
git checkout -b production
git checkout -b development
git checkout -b hotfix
Так что теперь у меня есть ветка для того, что находится на производстве, одна для интеграции и одна для неизбежных быстрых исправлений в работе. Я могу думать о dev / survey как о ветке «разработки».
Я выполнил команды git remote
, чтобы отразить и перенести все эти изменения в мой центральный репозиторий (gitolite). Это не позволило бы мне нажать :master
, потому что это могло бы сбить с толку клона - и я понял, но я, вероятно, настрою его, чтобы позволить мне идти вперед и делать это.
Итак, я попросил моего парня, работающего над «опросом», снять все эти изменения и с помощью git diff --stat
найти его измененные файлы для размещения на промежуточном сервере. Когда он это сделал, он получил длинный список файлов, которые, казалось, не имели отношения к его изменениям. Он получил все эти новые ветви, но почему-то не получил все коммиты или что-то в этом роде.
Я получил от него чистый клон репозитория, и он получил все изменения, которые я намеревался, и смог перенести свою работу на промежуточный сервер для тестирования.
Вопрос в том, что случилось с его репо, когда он столкнулся со всеми этими изменениями в ветке? Я думал, что ветвь - это просто особый случай тега - тега, который перемещается вместе с HEAD. Он должен был просто получить все нужные товары, не так ли?