2009-04-22 2 views
10

Мы используем Subversion для работы на соединительной линии, ветвей функций для значительных функций (> 1 дней работы) и разблокировки ветвей.Лучший способ предотвратить изменения в ветке с помощью Subversion

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

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

Каков наилучший способ предотвратить это? Я собираюсь заблокировать все файлы в ветви релиза, поможет ли это? Какие еще существуют варианты?

ответ

3

Не тратьте впустую свое время, пытаясь предотвратить это. Если разработчик вносит изменения в неправильную ветвь, просто верните его, если это произойдет, и обязательно сообщите об этом разработчику.

... hack hack hack ... on branch 
$ svn ci -m "Feature-1337 implemented" branch 
Revision 12345 

...oops... 

$ svn merge -c12345 branch trunk 
$ svn ci -m "moved Feature-1337 from branch to trunk" trunk 
$ svn merge -c-12345 branch branch 
$ svn ci -m "reverted Feature-1337 on branch. it's intended only for trunk" branch 
+3

Таким образом, чтобы избежать потери работы, я бы сделал примечание о пересмотре, объединился с веткой из магистрали, объединился обратно в магистраль, чтобы поймать изменения, сделанные в ветке, и вернуть папку ветвления обратно в предыдущую ревизию? –

+1

Тогда злобно избил разработчика, который заставил меня сделать все, что работает :) –

+0

Да, объедините ветку функции-> туловище, если это не дерьмо и принадлежит на багажнике. Затем «обратное слияние» на ветке, чтобы отбросить его обратно. Не забудьте проверить изменения. Затем, примените ключ к четырем. – bendin

3

Я думаю, что это будет хорошая практика, чтобы удалить «ветви релиз» и сделать их тег вместо этого, поскольку это назначение тега.

Это не решит проблему, хотя это может помешать большему числу этих аварий, так как вы никогда не должны работать в теге. И я согласен с брендином, если это все еще произойдет, верните эти изменения и удалите разработчика :-)

6

Почему все, у кого есть вся иерархия SVN? Было бы гораздо меньше подверженности ошибкам, если бы все только проверили, какие магистрали/ветви они работают. Вы не можете проверить что-то в ветке, которую вы не проверили.

Я могу повторить практику, чтобы пометить выпуск, упомянутый Razzie.

4

Я не знаю, какой-либо встроенный способ активно предотвратить это. Возможно, вы можете сделать это, используя «предварительный крюк хранилища». Это небольшая программа, которая выполняется перед каждой фиксацией. Если он терпит неудачу, коммит в целом не работает. См. the chapter on hooks в книге Subversion.

Ваш сценарий крюка будет проверять путь, который должен быть совершен, и запретить некоторые. Это может помочь: http://metacpan.org/pod/SVN::Hooks

Это, вы действительно уверены, что хотите это сделать?

Мы также используем ветви выпуска, и мы делаем do ocassionally проверяем в них вещи, как правило, критические исправления для клиентов, которые не могут сразу перейти на последнюю версию. Вы уверены, что вам это никогда не понадобится?

+0

Некоторые примеры отказа от перехвата прерываний: https://stackoverflow.com/questions/464384/svn-pre-commit-hook-for-avoiding-changes-to-tags-subdirectories – Vadzim

3

Почему вы используете ветви в качестве тегов? Я хотел бы предложить:

  1. Местных стандарты развития (т.е. не совершайте, где мы просим вас не совершать)
  2. Subversion переподготовку (т.е. почему разработчики проверку отказа всего репо?)
  3. Используйте структуру тегов для того, что было задумано

Это, как говорится, и при условии, что у вас есть хранилище иерархии непринужденный, как:

* repo 
    - tags 
    - trunk 
    - branches 

Хотя SVN Книга говорит против гранулированных таким образом, вы можете использовать svn_access_file, чтобы предотвратить фиксацию чего-либо на ветках? Например:

[repo:/] 
@developers = rw 

[repo:/branches] 
@developers = r 
@rel_engineers = rw 

Если вы хотите разработчиков, чтобы иметь возможность создавать филиалы, то вам придется спуститься в каждой отрасли в отдельности (который возвращается ко всему предпосылке SVN книги советуя против метода в первое место).

Смежные вопросы