Лучший способ предотвратить изменения в ветке с Subversion

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

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

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

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

Ответ 1

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

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

Ответ 2

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

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

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

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

Ответ 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 intended only for trunk" branch

Ответ 4

Я думаю, что было бы хорошей практикой удалить "ветки выпуска" и вместо этого сделать тег как таковую цель тега.

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

Ответ 5

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

  • Локальные стандарты развития (т.е. не совершайте, где мы просим вас не совершать)
  • Обучение переподготовке Subversion (то есть почему разработчики проверяют все репо?)
  • Используйте структуру тегов для того, что было предназначено

При этом и при условии, что у вас есть иерархия репозитория, изложенная как:

* repo
  - tags
  - trunk
  - branches

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

[repo:/]
@developers = rw

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

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