Немного фона
Я уже некоторое время пользуюсь Git. Проекты, над которыми я работал, не были слишком сложными в отношении веток / тегов.
Я решил использовать git-svn на работе. Репозиторий SVN имеет много разных веток. Многие из этих веток являются версиями магистрали, настроенными для клиентов.
Проблема
Я часто работаю над проблемами для разных клиентов в разное время. Поэтому я постоянно переключаюсь между ветвями. Проблема в том, что для тестирования продуктов мне приходится перестраивать проект каждый раз, когда я переключаюсь между ветками. Сборка занимает> 2 часа (с нуля): (
Я предполагаю, что есть способ сохранить файлы сборки в ветви customer_a
и затем извлечь customer_b
, изменить, собрать, протестировать, зафиксировать. Затем спрячьте файлы сборки и снова извлеките customer_a
и извлеките тайник customer_a
, чтобы вернуться туда, где я был.
Это работает, только если файлы сборки отслеживаются (т. Е. Добавляются или фиксируются). Я не хочу отслеживать файлы сборки и определенно не хочу их регистрировать. Есть ли способ сохранить (или сделать что-то подобное) для неотслеживаемых файлов? Или обычная практика, которую люди используют для достижения того же типа вещей?
Обратите внимание, что при сборке нашего проекта каждая библиотека (из которых тысячи) собирает файлы, локальные для папки библиотеки, т.е. они не перемещаются в папку сборки в корне проекта. Все встроенные файлы распределены повсюду.
Обновление ...
Итак, основываясь на некоторых комментариях, я думаю, что мне нужно привести пример моей проблемы
Вот моя структура папок.
branch1/
src/
component1/
c1.c
component2/
c2.c
libsrc/
library1/
lib_1.c
library2/
lib_2.c
branch2/
src/
component1/
c1.c
component2/
c2.c
libsrc/
library1/
lib_1.c
library2/
lib_2.c
Итак, проблема в том, что branch1
и branch2
имеют одинаковую родословную, но значительно разошлись. Поэтому, если я проверю branch1
и соберу его, я получу двоичные файлы (например, lib_1.o), с которыми я буду ссылаться в моем Makefile
для создания окончательных двоичных файлов компонента.
Если я затем извлекаю branch2
, внесите изменения в c1.c
и запустите make, он попытается связать двоичные файлы, созданные branch1
(lib_1.o), поскольку они все еще существуют в каталогах, как встроенные в предыдущая ветка. Чтобы избежать этого, мне нужно делать чистую сборку каждый раз, когда я переключаю ветки (это занимает часы).