Svn branch commit - экспериментальная фиксация

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

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

Ответ 1

Именно так вы это делаете (по крайней мере, в Subversion). Например:

svn cp svn://server/repo/trunk svn://server/repo/branches/experiment
svn switch svn://server/repo/branches/experiment
svn commit -m "testing stuff"

Операция Subversion cp (копирование) разработана очень дешево и на самом деле не делает копию всего кода в вашем репозитории. Он просто устанавливает указатели, указывающие на версию, которую вы скопировали в trunk.

Не все системы работают таким образом; например, в Git вы можете создать новую ветку и переключиться на нее с помощью одной команды: git checkout -b experiment.

Ответ 2

Разветвление SVN не копирует весь код еще раз, оно просто ссылается на оригинал и добавляет Diff вашего нового кода. Еще одна хорошая вещь отрасли - это то, что вы всегда можете объединить или синхронизировать ее с исходным кодом. Ветвь - это еще одна папка в репозитории SVN, например теги или соединительные линии.

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

Вы можете найти команды и дополнительную информацию о ветвях SVN в бесплатной SVN Book

Ответ 3

AFAIK большинство клиентов SVN с графическим интерфейсом (например, Tortoise, Subclipse, SvnX имеет команду ветвления, которая делает магию для вас.

В противном случае см. ответ Грега.