Ветвление SVN в Eclipse (концептуальный)

Я понимаю основную концепцию ветки и слияния. Все объяснения, которые я нашел, говорят о ветвлении всей вашей магистрали для создания проекта ветки и работе над ним, а затем слиянии его обратно. Можно ли разветвить часть проекта?

Думаю, пример поможет мне лучше всего объяснить, чем я хочу заниматься. Предположим, у меня есть приложение с десятью файлами с file0 по file10. Все файлы взаимозависимы, и чтобы иметь возможность протестировать любой файл, в сборку необходимо включить все остальные. Я хочу работать с file0, но мне не нужно вносить изменения в file1 - file10. Могу ли я создать ветвь file0, чтобы изменения, зафиксированные в file0, обновили что-то вроде myrepos / branch / a-branch / file0, но все остальные файлы в моей рабочей копии будут просто из ствола?

Причина, по которой я хочу это сделать, заключается в том, что я работаю над огромным j2ee-приложением с десятками тысяч файлов, и кажется, что ветвление всего этого займет очень много времени. Кроме того, я использую eclipse с subclipse (и я могу ошибаться в этом), но похоже, что если я ветвлю проект в eclipse, мне придется настроить новый проект eclipse, чтобы указать на ветку. К сожалению, импорт этого конкретного проекта из SVN в eclipse занимает несколько часов из-за размера приложения. Для меня нереально тратить столько времени.

Я полагаю, что у меня были неправильные концепции. Возможно, для ветвления всего проекта вообще не требуется новая рабочая копия?

Спасибо, что пролили свет на этот вопрос.


person John    schedule 22.07.2009    source источник


Ответы (4)


Разветвление целого (даже) очень большого дерева в Subversion - это очень дешевая операция, которая выполняет ленивое (O (1) раз) копирование файлов.

Вам не обязательно менять всю свою рабочую копию, чтобы работать только с одним измененным файлом. Для переключите один файл или один каталог в вашей рабочей копии на извлеченную версию файла в ветке.

person Avi    schedule 22.07.2009
comment
Это ваше решение quadelirius. Разветвите весь проект (быстро, как отметили все другие респонденты) и измените файлы, которые вам нужны, с помощью переключателя svn. Нет дополнительного места для рабочей копии. Только не забудьте переключить их обратно, когда захотите вернуться в багажник. - person quark; 22.07.2009
comment
Да, я пробую это сейчас во время затмения, и это дает именно тот эффект, о котором я беспокоился. Ветвление произошло мгновенно, но переключатель svn работал, вероятно, 5 или 6 минут, потому что eclipse решил, что необходимо перестроить весь проект. - person John; 22.07.2009
comment
25 минут затмения все еще не отвечает. - person John; 22.07.2009

В Subversion создание ветки - это просто копирование иерархии каталогов. Следовательно, вы можете разветвлять подмножество, но только если это подмножество может быть определено иерархией каталогов.

Могу ли я создать ветвь file0, чтобы изменения, зафиксированные в file0, обновили что-то вроде myrepos / branch / a-branch / file0, но все остальные файлы в моей рабочей копии будут просто из ствола?

Чтобы ответить на этот вопрос: нет, вы не можете ветвиться по одному файлу. Однако я думаю, что вы хотите вместо этого создать ветку и работать над file0 там. Внося изменения в trunk файлы, вы просто объединяете их в свою ветку, над которой работаете file0.

Таким образом, вы всегда будете получать самую свежую информацию из trunk, которая позволит вам тестировать file0 изменения независимо от ствола. Затем вы можете использовать svn switch для перемещения «линзы файла» между стволом и ветку (но будьте осторожны, Eclipse может жаловаться на такие махинации).

person John Feminella    schedule 22.07.2009

Ветвление svn основано на механизме ленивого копирования, поэтому вы можете безопасно выполнить ветвление всего проекта: это не займет много времени.

Как упоминалось в вопросе «Как разветвить отдельный файл в SVN? ", вы можете разветвить подмножество, но я считаю, что это было бы опасно с svn: механизм свойств merginfo: он работает лучше, если свойство устанавливается из корня проекта.

person VonC    schedule 22.07.2009
comment
На сервере это не займет много времени. Для этого действительно требуется дополнительная рабочая копия, чего, похоже, пытается избежать вопрошающий. - person quark; 22.07.2009
comment
@quark, да, я не хочу, чтобы мне приходилось повторно импортировать этот проект каждый раз, когда я хочу выполнить ветвление, но похоже, что это единственный способ работать с ним. - person John; 22.07.2009

Ветвление в SVN - это операция O (1). Кроме того, поскольку SVN внутренне использует отложенное копирование, вы платите только штраф за то, что вы изменяете.

Итак, если вы не уверены, почему бы не пойти дальше и не разветвить весь проект?

(Как упоминалось в Quark, одна проблема с ветвлением больших проектов заключается в том, что если вы проверяете несколько веток / магистраль параллельно, это может занять много места на локальном диске.)

person sbi    schedule 22.07.2009
comment
Снова обратите внимание на то, что он говорит о рабочей копии. Если размер рабочей копии не является проблемой, это хороший совет. Но с очень большими рабочими копиями это может быть проблемой. - person quark; 22.07.2009
comment
Это может быть проблемой только в том случае, если вы проверяете их параллельно. Обратите внимание, что он писал о переключении между ветвями. Однако я согласен, что намек относительно размера рабочей копии будет необходим. - person sbi; 22.07.2009