Я использовал Мерзавца некоторое время теперь. Проекты, что я продолжал работать, не были слишком сложными в отношении ответвлений/тегов.
Я решил использовать мерзавца-svn на работе. Репозиторий SVN имеет много различных ответвлений. Много этих ответвлений является клиентскими настроенными версиями соединительной линии.
Я часто работаю над проблемами для различных клиентов в различном то же время. Таким образом, я переключаюсь назад и вперед между ответвлениями все время. Проблема состоит в том, что для тестирования продуктов я должен восстановить проект каждый раз, когда я переключаюсь между ответвлениями. Сборка берет> 2 часа (с нуля) :(
Я предполагаю, что существует способ спрятать файлы типа "build" в ответвлении customer_a
и затем контроль customer_b
, измените, создайте, протестируйте, фиксация. Затем спрячьте файлы типа "build" и контроль customer_a
снова и поп customer_a
притон для возвращения туда, где я был.
Это только работает, если файлы типа "build" прослеживаются (т.е. добавляются или фиксируются). Я не хочу отслеживать файлы типа "build", и я определенно не хочу регистрировать их. Существует ли способ спрятать (или сделать что-то подобное) для неотслеженных файлов? Или обычная практика, которую люди используют для достижения того же типа вещи?
Обратите внимание, что способ, которым наш проект разрабатывается каждая библиотека (которых существуют тысячи) добирается, создает файлы, локальные для папки библиотеки, т.е. они не перемещены в папку сборки в корне проекта. Все созданные файлы распространены повсеместно.
Таким образом на основе некоторых комментариев я думаю, что должен дать пример своей проблемы
Вот моя структура папок.
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), так как они все еще существуют в каталогах, как создано в предыдущем ответвлении. Для предотвращения этого, я должен сделать чистую сборку каждый раз, когда я переключаю ответвления (который занимает часы).
Хорошо
Итак, этот вопрос некоторое время оставался без ответа, и я просто пробовал разные решения локально .
Лучшее, что я придумал, - это использовать крючки до и после оформления заказа.
Вот что я сделал
Создайте папку .binaries
на верхнем уровне вашего репозитория и добавьте ее в файл .gitignore
.
Добавьте также форматы файлов двоичных файлов в свой файл .gitignore
.
напишите сценарий на вашем любимом языке сценариев, чтобы найти все файлы указанного формата, который переместит их в папку .binaries /
с той же структурой пути, например src / library1 / lib1.o
следует ПЕРЕМЕСТИТЬ в .binaries /
- это должно вызываться при предварительной проверке.
Напишите сценарий для перемещения файлов из папки .binaries
в текущую ветку, например. .binaries /
следует ПЕРЕМЕСТИТЬ в src / library1 / lib1.o
- это должно вызываться после оформления заказа
Теперь переключение между ветвями вернется к двоичным файлам, которые были созданы во время только для этой ветки, и у вас будет чистая проверка при создании новой ветки.
Возможно, мне не хватает чего-то очевидного, но при переключении веток Git не будет касаться неотслеживаемых или игнорируемых файлов, поэтому, если вы создаете продукт в одной ветке а потом переключитесь в другую ветку, собранные продукты должны остаться.
Проблема в том, что вам нужно вернуть правильные двоичные файлы:
Последний пункт - не слишком важно, если вы продолжаете разрабатывать последние версии своих двух веток (и соглашаетесь перестроить все, если вы проверяете старый тег и переходите оттуда).
Но все же, если после сборки вы автоматически публикуете эти файлы .o в репозиторий, предназначенный для управления двоичными файлами, это решит вашу проблему аккуратно.
Например, подойдет локальное репозиторий Nexus.