По-моему, это - больше вопрос персонального предпочтения. nAnt является большой платформой, и MSBuild почти как способный. Со способностью легко разработать пользовательские задачи (в обеих платформах) можно выполнить почти что-либо, что необходимо сделать.
я не могу ответить на "все еще поддерживаемую" часть Ваших вопросов, но я сказал бы, довольны ли Вы уже nAnt тогда, это, вероятно, жизнеспособно. Если Вы (или кто-то в Вашей группе) знакомы с MSBuild тогда, это - прекрасный способ пойти также.
Когда у меня есть незафиксированные изменения из одной задачи в моей рабочей копии и мне нужно переключиться на другую задачу, я делаю одно из двух:
Получение новой рабочей копии для вторая задача.
или
Запустить ветку:
рабочая копия $ svn copy CURRENT_URL_OF_WORKING_COPY SOME_BRANCH
рабочая копия $ svn переключатель SOME_BRANCH
рабочая копия $ svn commit -m "незавершенная работа"
переключатель workingcoyp $ svn WHATEVER_I_WAS_WORKING_ON_BEFORE
У меня есть несколько скриптов, которые помогают это автоматизировать.
Мне тоже нужна эта функция . В настоящее время я использую TortoiseSVN.
Я не нашел надежного решения, кроме как экспортировать дерево, вернуться обратно в репозиторий, внести свои изменения и зафиксировать, а затем сравнить изменения из экспортированного дерева обратно в каталог, контролируемый исходным кодом, с помощью такого инструмента, как Beyond Compare.
Или другое решение может заключаться в переходе из HEAD в другой каталог, внесении изменений и фиксации. Как только вы'
Самый простой способ - использовать временную ветку, например:
$ svn copy ^/trunk ^/branches/tempbranch
$ svn switch ^/branches/tempbranch
$ svn commit -m "Stashed"
$ svn switch ^/trunk
$ ... hack away in trunk ...
$ svn commit -m "..."
$ svn merge ^/branches/tempbranch .
$ svn rm ^/branches/tempbranch
$ ... continue hacking
Это можно (и, вероятно, нужно) поместить в скрипт если делать это на более регулярной основе.
Другой вариант - скопировать текущую проверку в новый каталог и отменить все изменения. таким образом вы избавитесь от хлопот по созданию временной ветки на вашем сервере - в конце концов, хранение - это локальная операция, которую не все должны видеть, и ее можно выполнять довольно часто.
после фиксации исправления вы можете обновить свою основную рабочую скопируйте и удалите «область хранения»
Вы можете сохранить свои текущие изменения с помощью svn diff
в файл патча, а затем вернуть вашу рабочую копию:
svn diff > stash.patch
svn revert -R .
После того, как вы внедрили свою подготовительную функцию, вы можете затем примените свой патч с помощью утилиты patch:
patch < stash.patch
Как отмечали другие, это не будет работать с svn: properties
и операциями с деревом (добавление, удаление, переименование файлов и каталогов).
Двоичные файлы могут также вызывают проблемы, я не знаю, как patch (или TortoiseSVN в данном случае их обрабатывает).
В этом сообщении блога рекомендуется использовать diff и patch.
git stash
примерно становится svn diff> patch_name.patch; svn revert -R.
git stash apply
становится patch -p0
Обратите внимание, что это не сохраняет изменения метаданных или (я думаю) каталог создает / удаляет. (Да, svn отслеживает их отдельно от содержимого каталога, в отличие от git.)
Я не знаю простого способа сделать это с помощью svn. Честно говоря, я бы посоветовал использовать git-svn
для создания репозитория git, который действует как рабочая копия svn, и просто использовать с этим git stash
. Просто замените git pull
на git svn rebase
и git push
на git svn dcommit
, и вы сможете сохранить 90% рабочего процесса git. и по-прежнему разговаривать с svn-сервером.