Разработка Git → рабочий процесс - как настроить репо? - PullRequest
1 голос
/ 04 июня 2010

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

Мы начали создавать стабильную ветку, которая развернута на живом производственном веб-сервере. Ветвь master - это то, что развертывается на вторичном "нестабильном" сервере для тестирования. Всякий раз, когда мы чувствовали, что ветка master готова к запуску, мы объединяли ее в stable .

Тем не менее, мы подошли к моменту, когда нам потребовался один из более поздних master коммитов, но не некоторые коммиты до него, поэтому мы использовали cherry-pick, чтобы перенести это изменение в stable . Это создает новый коммит с тем же изменением, что и в master , и создается ощущение, что мы теряем прекрасную историю, которую обеспечивает Git.

Существуют ли более эффективные способы обработки этого типа нестабильной / стабильной модели развертывания?

Одним из решений, о котором я подумал, было использование ветвей функций и объединение ветвей функций в master только тогда, когда мы хотим, чтобы оно заработало. Тогда мы будем tag каждое развертывание вместо стабильной ветви.

Ответы [ 4 ]

3 голосов
/ 07 июня 2010

прочитайте http://nvie.com/git-model и используйте hxxp: //github.com/nvie/gitflow

2 голосов
/ 07 июня 2010

Вы правы, говоря, что это подрывает историю, которую хранит мерзавец, собирая вишню. Здесь нужно подумать, почему вы не хотите, чтобы предыдущие стабильные коммиты?

(примечание: если некоторые последующие коммиты вы еще не готовы портировать, вы, конечно, можете использовать git merge <commit-id>, а не cherry-pick, чтобы сохранить историю чисто - будущие слияния также умны, чтобы не дублировать коммиты / Изменения)

Если вы не хотите их, потому что они не готовы к основной линии или не полностью протестированы, что дает вам уверенность в том, что желаемый коммит (который зависит от них и их состояния) готов?

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

Требуется немного больше дисциплины, чтобы подумать о влиянии ваших коммитов, когда вы работаете (так как вы уже делаете коммиты рано и часто;), но это делает процесс ветвления / слияния намного проще - git checkout -b new-feature ваш друг, чтобы быстро добавить коммит с другими, не связанными изменениями в середине работы в ветке темы (или git checkout -b new-feature master, если вы особенно хорошо дисциплинированы и не имеете дополнительных изменений, висящих вокруг вашего рабочего дерева).

0 голосов
/ 04 июня 2010

Мы используем следующий рабочий процесс:

  1. Все ошибки изменений / возможностей / улучшений вводятся в JIRA
  2. Мы создаем филиал в JIRA с названием билета, например. TKT-1234
  3. Work-Work-Green-Commit-Push-to-central (в нашем случае github, но не важно) на ветви TKT-1234
  4. Хадсон (CI-сервер) опрашивает центральное репо, видит новые ветви, объединяет их в master, компилирует, тестирует, передает в центральное состояние, если тесты проходят
  5. Разработчики регулярно вытягивают из центра

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

Для перехода на prod мы вручную создаем ветку в хранилище UAT после проверки, это развернуто.

0 голосов
/ 04 июня 2010

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

Если вы хотите, чтобы только некоторые изменения слились в стабильную ветвь, вы можете выбратьфункциональности, которые вам нужны, выбрав правильные ветви.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...