Лучший способ предотвратить изменения в ветке с 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, в которой рекомендуется избегать этого метода).