Немного фона
Я использовал Git какое-то время. Проекты, над которыми я работал, не были слишком сложными в отношении веток/тегов.
Я решил использовать git -svn на работе. Репозиторий SVN имеет много разных веток. Многие из этих ветвей - это настроенные пользователем версии туловища.
Проблема
Я часто работаю над проблемами для разных клиентов в разное время. Поэтому я переключаюсь между ветвями все время. Проблема в том, что для тестирования продуктов мне приходится перестраивать проект каждый раз, когда я переключаюсь между ветвями. Сборка занимает > 2 часа (с нуля): (
Я предполагаю, что есть способ зашифровать файлы сборки в ветке customer_a
, а затем проверить customer_b
, изменить, построить, протестировать, зафиксировать. Затем снова запустите файлы сборки и checkout customer_a
и введите stash 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
и запустите, чтобы попытаться связать их с бинарниками, созданными с помощью branch1
(lib_1.o), поскольку они все еще существуют в каталогах, встроенных в предыдущей ветки. Чтобы этого избежать, я должен делать чистую сборку каждый раз, когда я переключаю ветки (что занимает несколько часов).