Как держать одновременно две ветки в рабочей копии?

Есть проект (прошивка для микроконтроллера). Хочу сделать урезанную версию для нужд тестирования, которая основывалась бы на коде основной версии.
Хочу, чтобы обе версии были одновременно в рабочей копии и не было необходимости постоянно переключаться. При этом должна быть возможность легко подлить изменения из основной версии.
Если тестовую версию сделать отдельной веткой, то, насколько я понимаю, не получится ее держать в рабочей копии одновременно с master, в отличие от SVN, например. Придется постоянно переключаться между ветками.

Как это можно сделать в Git?
  • Вопрос задан
  • 1089 просмотров
Решения вопроса 1
Lobotomist
@Lobotomist
Software Developer
Я вижу два варианта:

1. Использовать два репозитория.

Вы просто клонируете репозиторий еще в одно место и работаете с ним отдельно.
- Весь репозиторий дублируется, но если он не очень большой по размеру - в этом нет ничего страшного
- Переносить изменения между репозиториями надо будет через pull/push, просто commit-ов будет недостаточно. Например, в репозитории (а) делается коммит в ветку (1), в репозитории (б) делается fetch из репозитория (а) ветки (1) и дальше ее коммиты могут уже черри-пикаться или как-то еще переносится в ветку (2).

2. Использовать дополнительную рабочую директорию (git 2.5+)

В новой версии git 2.5 появилась команда для создания дополнительной рабочей директории: git worktree. Если есть возможность обновить git, это наиболее удобный вариант. Нужно иметь ввиду, что фича пока эксперементальная.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@FoxInSox
Никак, подобная проблема решается не git'ом, а например конфигурационными файлами. Грубо говоря, в проекте где-то должен быть файл описывающий как должен собираться проект:

releaseConfig{
  useMockObjects = false
  ignoreNetwork = false
}
debugConfig{
  useMockObjects = true
  ignoreNetwork = true
}

Компилятор, ваша IDE или CI сервер собирает ту или иную версию проекта на основе этого файла. Файл этот, кстати, может быть не в git репозитории, или там может быть какая-либо базовая версия - это все зависит уже от нужд и контекста.
Ответ написан
Комментировать
Вообще, Git хорош для исходных кодов. Хранить бинарные выпуски прошивок в репозитории нехорошо.
В идеале для тестирования нужно в ветке master иметь подпапку со сценариями (скриптами) для тестирования.

Если речь идёт, допустим, об экспериментальных прошивках, то, возможно, имеет смысл создать отдельный git-репозиторий и периодически (после тестирования) вливать в стабильный репозиторий.

Или, альтернативно, чтобы не переключаться постоянно, предлагаю сделать следующее:
  • создать новую папку проекта PrjTest, склонировав master репозиторий при помощи git clone
  • создать в репозитории ветку test/experimental для тестирования: git checkout -b test. В новой папке будет основной ветка для тестирования
  • переключаться между ветками не нужно: просто используется путь к другой папке: Prj или PrjTest
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы