Изтриване на клон на Subversion

Беше ми възложено да обединя няколко клона обратно в ствола в Subversion. В момента настройката на проекта е нещо като следното.

trunk
branches
    BranchA
    BranchB
    BranchC
tags
    // A bunch of tags (1 per release)

Целта е да се интегрират BranchA и BranchB обратно в багажника и след това да бъдат "скрити" по някакъв начин.

Мисля, че знам как да направя действителното сливане. Щракнете с десния бутон върху багажника в Windows Explorer и TortoiseSVN > Merge... след това Reintegrate a branch, изберете клона, след което обединете.

Въпрос 1 - Това ли е правилният метод за използване?

Също така не съм сигурен как ще изглежда хранилището, след като направя това. Искаме да сме сигурни, че няма бъдещи разработчици да работят по погрешка върху старите клонове.

Въпрос 2 - Ще бъде ли клонът неработещ след сливането или ще трябва да направим нещо друго? Можете ли да "изтриете" клон? Ако е така, какво ще се случи с историята на клона? Или ще трябва да направим нещо хакерско като прилагане на ключалки към клона?

Благодаря за всяка помощ.


person Snowy Coder Girl    schedule 07.02.2013    source източник


Отговори (2)


Въпрос 1 - Това ли е правилният метод за използване?

Да, това ще обедини съдържанието на клона във вашата работна директория. Нищо няма да се случи с хранилището, докато не ангажирате (новообединения) ствол. След като извършите ангажимент, не само промените в ствола ще бъдат в репото, но и ще запомни какво е обединено от клона.

Въпрос 2 - Ще бъде ли клонът неработещ след сливането или ще трябва да направим нещо друго?

На този етап можете да изтриете клона или можете да продължите да правите промени в клона. Ако продължите да правите промени в клона и по-късно направите ново сливане, само новите неща (не нещата, които са били обединени преди това) ще бъдат слети в ствола.

Ако искате да изтриете клона, най-лесният начин, който открих, е да отворите репо браузъра, да щракнете с десния бутон върху клона и да изберете „Изтриване“. Клонът ще изчезне от най-новата версия. Той все още ще бъде в хронологията на репо сделките и можете да го върнете обратно, ако е необходимо, но някой, който прави нова проверка, няма да го види.

person Ferruccio    schedule 07.02.2013
comment
Ако изтриете клона, как ще можете да видите/получите историята? - person Snowy Coder Girl; 08.02.2013
comment
ах Когато отворите репо браузъра, просто трябва да се върнете към ревизия, която все още е имала клона. Чудя се дали има начин да видя всички клонове, които някога са съществували? - person Snowy Coder Girl; 08.02.2013

От командния ред (отговор на въпрос1):

$ cd $DEVROOT/trunk

$ svn merge http://company.org/svn/proj/branches/BranchA
....
$ svn ci -m 'Merged BranchA'
$ cd rm -m 'BranchB already merged' http://company.org/svn/proj/branches/BranchA

$ svn merge http://company.org/svn/proj/branches/BranchB
....
$ svn ci -m 'Merged BranchB'
$ cd rm -m 'BranchB already merged' http://company.org/svn/proj/branches/BranchB

Обединяването на ствол към клон и обратно сливане, сливане към ствол не е валидно използване на SVN. Защо - прочетете:

Не мога да отговоря на вашия въпрос2, тъй като не знам вашите реални изисквания... Препоръчвам да прочетете официалното ръководство:

и предлагаме да използвате лист с функции за разработка на функции и лист с клонове за дългосрочна поддръжка на версии и тагове за версии.

И не препоръчвайте да премахвате никакви клони. Защо? Тъй като премахването в SVN не прави хранилището по-малко... Само направете изхода svn ls по-кратък...

Вижте моето ръководство:


  • Всяка голяма версия има собствен клон.
  • Още един клон, запазен за развитие.
  • Последният основен клон на релиз е активен. Всички по-стари основни клонове са пасивни.
  • Пасивните основни разклонения бяха използвани само за корекции на незначителни грешки в най-новия код от тази серия от основни версии (без нови функции).
  • Функции, разработени в клона за разработка. Преди пускане в обединен към активен основен клон на изданието.
  • Грешка беше коригирана в най-стария клон на основна версия, за който трябва да бъде предоставена и обединена с всички следващи клонове на основна версия и клон за разработка.
  • Пускане означава завършване на разработването на набор от функции и корекции на грешки в клонове и преместване на компилация на продукт към сървър за освобождаване.
  • След тестване и стабилизиране беше направено освобождаване. Това означава:

    • VERSION file was updated.
    • Файлът CHANGE беше изпълнен с набор от функции, версия, данни и номер на ревизия на VCS.
    • Маркирайте изданието чрез етикет във VCS.
    • Извикване на изграждане на източници, които са маркирани с етикет. Копирайте резултата в сървъра за освобождаване.
  • Ако бъде открит бъг в някоя версия, той се коригира в клона за разработка и се пуска с нова второстепенна/коригирана версия на продукта.

  • Предишни основни/минорни версии не се поддържат (използвайте само най-новата версия). Потребителите винаги са принудени да актуализират до най-новата версия.

Тук t - етикети, b - клонове:


  +--+-----+----------------------+-----+----+------+------+----->
  dev|     |            ^     ^   |     |    |      |      |
     |     |            |     |   |     |    v      v      v
     |     |            |     |   |     |    +--+------+------+-->
     |     |            |     |   |     |    b2 |      |      |
     |     |            |     |   |     |       v      v      v
     |     |            |     |   |     |      t2.0.0 t2.0.1 t2.1.0
     v     v            |     |   v     v
    t0.1.0 +---+------+-+---+-+-----+------+------+------+------+--->
           b1  |      |     |       |      |      |      |      |
               v      v     v       v      v      v      v      v
              t1.0.0 t1.0.1 t1.0.2 t1.1.0 t1.2.0 t1.2.1 t1.2.2 t1.2.3

В този пример пускаме тагове 1.0.1 и 1.0.2 с корекции на грешки в клон 1, тъй като клонът за разработка не беше готов за производство.

person gavenkoa    schedule 07.02.2013
comment
Ако искате да премахнете стари клонове, защо не потърсите интеграция на Git/Mercurial към SVN?? - person gavenkoa; 07.02.2013