Git: казалось бы, простые вопросы ветвления - PullRequest
4 голосов
/ 19 марта 2010

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

Я читал кучу статей о ветвлении Git, но я не могу понять концепции, лежащие в основе их работы, и это вызывает у меня некоторое разочарование при попытке правильно настроить мои ветки.

Вот моя ситуация: у меня есть проект, который представляет собой набор рейковых задач, специфичных для создания нашего веб-сайта на определенном сервере. Прямо сейчас мы используем систему на основе Debian, но мы собираемся перейти на систему на основе Ubuntu, поэтому я хотел бы раскошелиться (разветвить) свой проект и создать отдельную ветку для каждого дистрибутива сервера, и я бы хотел, чтобы каждая ветка чтобы можно было легко извлекать все изменения общего кода из основной ветви, когда я запускаю git pull в любой ветви. Из того, что я прочитал, этого можно добиться, отслеживая основную ветку, но я не могу заставить ее работать должным образом.

В дополнение к этому мне также нужно начать создание версий другого проекта, чтобы я мог его выпустить, но я действительно не знаю стандартного способа достижения этого в Git. В моей старой компании мы использовали TFS (которую я ненавидел), и это было довольно просто: мы создавали ветку из мастера и называли ее «Версия 2». Затем мы должны были убедиться, что версия 2 была стабильной, и исправлять любые ошибки, затем время от времени мы сливали изменения версии 2 обратно в основную ветку. Это способ Git для достижения этого, и если да, то как именно я это сделаю?

Итак, в заключение, я задаю следующие два отдельных (но очень связанных) вопроса:

  1. Как мне создать удаленную ветку (на GitHub), которая автоматически отслеживает изменения в master, чтобы я мог запустить git pull в новой ветке и получить все основные изменения; и
  2. Каков наилучший метод для управления версиями моего проекта, и можете ли вы привести некоторые примеры команд?

Большое спасибо, и, пожалуйста, дайте мне знать, если что-то требует разъяснений!

1 Ответ

3 голосов
/ 19 марта 2010

Если я вас правильно понимаю, я не думаю, что вы правильно используете трекинг. Отслеживание используется, например, для отслеживания различий между локальной веткой и удаленной копией той же самой ветки. Ваша ветка "версия 2" не должна отслеживать мастер. Ваш местный мастер должен отслеживать происхождение / мастера (удаленное репо).

Вместо отслеживания (если я вас правильно понимаю) вы должны использовать rebase. Когда в master есть новые патчи, которые вы хотите в своей ветке версии 2, вы делаете (при условии, что вы в данный момент находитесь в ветке версии 2):

git rebase master

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

...