2015-02-19 3 views
0

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

Допустим, я работаю на билет #2015 где я должен был внести изменения в файлах index.html и app.js, но по какой-то причине этот билет теперь препятствовала и я жду чего-то, чтобы я мог продолжать работать над Это.

Итак, чтобы не простаивать, теперь я начну работать на билет #2047, скажем, который будет содержать изменения в файле blue-theme.css, а также index.html.

Если предположить, что я работаю с Subversion, которые являются наиболее подходящей операцией я мог бы использовать, чтобы не потерять свою работу на билете #2015, но и не совершать эти изменения в файл index.html, как будто они принадлежат билету #2047?

+1

Я считаю, что вы имеете в виду, что git называет «[stashing] (http://git-scm.com/book/en/v1/Git-Tools-Stashing)» и что SVN называет «стеллажи». Он находится в [дорожной карте] (http://subversion.apache.org/roadmap.html), но продолжает толкаться позже и позже. –

+0

Используйте ветвь в первую очередь и выполняйте работу с этой веткой, переключаясь на другую ветку. Или тайно используйте 'git svn' и сохраните свой временный материал с помощью' git stash'. Это также существенно упрощает использование временных, личных филиалов. – tripleee

ответ

2

Способ Subversion - создать ветку для каждого билета. Как только вы уверены, что ваш билет закрыт, вы делаете окончательное слияние от trunk до филиала билета, проверяете его, а затем объединяете ветку обратно в trunk.

Пример

Давайте предположим, что у вас есть следующие настройки в вашем репо:

^/trunk 
^/branches 

Пусть trunk будет ваш «стабильный» хранилище, пока вы делаете исправление ошибок в отраслях (общий шаблон рабочего процесса для используя Subversion). Затем, ваша ситуация с вопроса может быть обработана следующим образом:

  1. Создать филиал билета 2015: svn cp path/to/repo/trunk path/to/repo/branches/ticket-2015
  2. Заканчивать филиал билета: svn co path/to/repo/branches/ticket-2015
  3. Работа по проблеме 2015 в вашей рабочей копии ticket-2015 и фиксация в тебе нравится.
  4. Начало работы над билетом 2047, создав новую ветку для него: svn cp path/to/repo/trunk path/to/repo/branches/ticket-2047; svn co path/to/repo/branches/ticket-2047
  5. В какой-то момент вы удовлетворены работой на 2047 и вы решили реинтеграцию:
    • Вы делаете окончательное слияние с trunk: cd ticket-2047; svn merge ^/trunk; svn commit
    • Вы проверяете, если все еще работает
    • Вы реинтеграцию, проверяя рабочую копию trunk, сливаясь вашу ветку, и совершение его: svn co path/to/repo/trunk; cd trunk; svn merge ^/branches/ticket-2047; svn commit
  6. После того, как ваш филиал реинтегрированы, вы можете удалить его из репозитория (не беспокойтесь, история, конечно, будет сохранена, никогда ничего не получает действительно удален из СВН): svn rm path/to/repo/branches/ticket-2047
  7. Вы продолжаете с тем же подход к билету 2015

при таком подходе у вас есть некоторые преимущества:

  • легко работать с несколькими людьми на одном вопросе
  • легко сделать автоматическое тестирование (если у вас есть система, созданная для него)
  • ни одно из изменений для любого билета не заблудиться, и
  • будет не Mixup вообще между двумя билетами
+0

Теперь это фантастический ответ, который не только дает отличный ответ на мой вопрос, но и объясняет технику, которая может быть использована для предотвращения этой проблемы и организации хранилищ! Хотел бы я прочитать что-то подобное раньше. –

0

Самый простой вариант: создать новую рабочую копию. Просто svn checkout ваш проект в новое место, оставляя свою старую рабочую копию со всей ее незафиксированной работой без изменений и выполняйте новый рабочий билет в новой рабочей копии.

Вы можете сделать то же самое, используя обычные команды файловой системы (не svn copy), чтобы скопировать рабочую копию в новое место, а затем с помощью svn revert в новом месте, чтобы отменить незавершенную работу над новой рабочей копией.

Дополнительная опция: если вы не хотите работать с двумя рабочими копиями, вы можете использовать svn diff (или в TortoiseSVN, «просмотреть унифицированный diff»), чтобы экспортировать текстовое различие всех ваших модификаций. Сохраните это в файле, а затем верните все свои изменения. Позже, когда вы закончите свой второй билет и хотите восстановить свои изменения с первого билета, используйте команду svn patch для повторного применения изменений из файла diff.

Смежные вопросы