Если другой человек действительно сидит рядом с вами, могу я предложить парное программирование? Они могут перейти на ваш компьютер, и вы можете работать вместе на нем. Это может быть очень эффективно, и когда у вас возникают проблемы, вам не нужно работать в изоляции.
При этом даже при парном программировании иногда приходится отправлять код кому-то еще, который не готов к транку. Помимо задействованного набора текста, создание кратковременной ветви в subversion не так уж и много, и некоторые небольшие сценарии автоматизируют большую часть процесса для вас.
Вот два сценария, которые работают для меня. Они принимают структуру хранилища, такую как:
project/trunk/
/branches/some_branch
/another_branch
Для работы с другой структурой потребуются некоторые корректировки.
# script 1: svn_wc2b (working copy to branch)
trunk_url=`svn info | grep URL | sed 's/URL: //'`
project_base=`svn info | grep URL | sed 's/URL: //;s/\/trunk.*//'`
branch_name=my_working_copy
svn cp $trunk_url $project_base/branches/$branch_name -m "Creating temporary branch for working copy."
svn switch $project_base/branches/$branch_name
Тогда, когда вы захотите поделиться своей рабочей копией транка, вы наберете:
svn_wc2b # creates branch, switches to it
svn commit # commit your in-progress work to the branch
Чтобы получить код, другому разработчику просто нужно набрать:
svn switch http://repository/project/branches/my_working_copy
Когда другой разработчик завершит работу и внес изменения, используйте скрипт, подобный следующему:
# script 2: svn_b2wc (branch to working copy)
branch_revision=`svn log -q --stop-on-copy | grep '^r[0-9]' | sed 's/^r//;s/ |.*//' | tail -n 1`
if [ -e $branch_revision ] && [ -e $1 ]
then
echo "Couldn't get branch creation revision number. Check svn log --stop-on-copy and use svn_b2wc <revision_number>"
exit
elif [ -e $branch_revision ]
then
branch_revision=$1
fi
branch_url=`svn info | grep URL | sed 's/URL: //'`
project_base=`svn info | grep URL | sed 's/URL: //;s/\/branches.*//'`
branch_name=my_working_copy
svn switch $project_base/trunk
svn merge -r $branch_revision:HEAD $branch_url .
svn delete $branch_url -m "Deleting working copy branch."
Из вашего каталога, который был переключен в вашу ветку, вы набираете:
svn_b2wc # switch back to trunk, merge branch changes, delete branch
Код, измененный в ветви, теперь вернулся в вашу рабочую копию транка, и вы можете продолжать работать, пока не будете готовы к фиксации. Может показаться, что просто поделиться некоторым кодом - это много, но если вы потратите некоторое время на автоматизацию своих процессов с помощью сценариев, тогда вам понадобится всего несколько секунд, чтобы использовать его.