Какой наименее болезненный способ перенести локальные изменения Subversion на другую машину? - PullRequest
3 голосов
/ 22 февраля 2009

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

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

Я попытался передать файлы .patch с помощью TortoiseSVN, но он продолжает жаловаться на то, что «патч относится к более ранней ревизии» (не соответствует действительности, и почему вас это волнует?) Или «строки не совпадают» (да, они не совпадают, потому что я изменился их). Мне вообще не понравился опыт "непрерывных всплывающих окон с ошибками".

Я не хочу устанавливать Cygwin, поэтому исправление командной строки исключено.

Я полагаю, что последний вариант будет разветвлять новую ветку для этой функции и перейти в цикл "checkin / update". Тем не менее, они показаны в истории Трак, создавая там загрязнение.

Есть идеи получше? Или я что-то пропустил?

Ответы [ 8 ]

7 голосов
/ 22 февраля 2009

Вы пытались создать новую ветку и использовать svn switch . Он перенесет вас в другую часть хранилища и сохранит ваши изменения, если вы перейдете от своей первоначальной рабочей версии.

6 голосов
/ 22 февраля 2009

Что касается альтернативных подходов, вы можете добавить GIT к смеси. Модель управления исходным кодом GIT позволит вам перемещать наборы изменений между рабочим столом и ноутбуком. А поскольку GIT управляет информацией о своих изменениях в локальной файловой системе, коммиты, которые вы делаете с обеих сторон, не будут появляться в потоке, который отслеживает ваша система TRAC.

Итак, вы в основном выходите из сети с помощью subversion и завершаете свою работу с помощью коммитов GIT. Как только вы закончите, проверьте весь комплект и kaboodle к вашему сундуку подрывной деятельности.

В Subversion ветви функций имеют малый вес и идеально подходят для изоляции таких функций, как эта. Если вы используете Subversion 1.5 или выше, тогда весь процесс синхронизации и слияния будет намного проще, чем это было в 1.4.

5 голосов
/ 22 февраля 2009

Ветвление - это чистый раствор. И имеет дополнительное преимущество, предоставляя вам резервную копию, пока вы работаете над этим огромным изменением. Не говоря уже о простой синхронизации будущих изменений между машинами.

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

1 голос
/ 22 февраля 2009

Если вам просто нужна реплика на рабочем столе, я считаю, что Live Sync идеально подходит для этого сценария. Я настроил его так, чтобы он копировал папку с моей картой на моем ноутбуке и двух рабочих столах, что дает мне абсолютно одинаковое состояние на трех машинах. И все это происходит непрерывно на заднем плане.

Или вы можете пойти на ветку и убедиться, что вы не забыли зафиксировать какие-либо изменения на ноутбуке, прежде чем перейти на рабочий стол. : -)

РЕДАКТИРОВАТЬ: В ответ на комментарий - да, могут возникнуть проблемы, если вы начнете редактировать файлы, когда две машины находятся в процессе синхронизации. Худшее, что может случиться, - это потерять некоторые правки на одной из машин. На практике шансы на это довольно малы.

1 голос
/ 22 февраля 2009

Не последний вариант, первый: вы должны были создать ветку объектов уже давно, если изменений действительно так много.

Вы можете сделать это по-прежнему, выполнив svn-копию из рабочей копии в каталог-ветвь на сервере, поэтому вам не нужен «цикл проверки / обновления», просто одна проверка, просто один обновление / переключение, действительно.

Как svn copy MyWorkingCopy svn: // сервер / проект / ветви / функции / моя-функция-ветка

1 голос
/ 22 февраля 2009

Я бы создал временную ветку для этой цели. Таким образом, вы используете только имеющиеся в вашем распоряжении инструменты SVN и не загрязняете мета-мета и не копируете артефакты.

Кроме того, похоже, что вы проверяете свой код с интервалом и наличие ветки также предотвратит потерю данных в случае сбоя жесткого диска.

0 голосов
/ 24 февраля 2009

Можно попробовать SVK . Из сообщения в блоге и сайта SVK типичный сценарий использования SVK:

  • зеркало существующих удаленных репозиториев,
  • затем создайте ветки на вашем компьютере,
  • локально работают над этими ветками, а
  • когда вы закончите, объедините их обратно в зеркальный сундук,
  • последний шаг будет прозрачно обновлять удаленный репозиторий.

У меня нет практического опыта использования SVK. Но я думаю, что это соответствует вашему сценарию. Этот блог описывает это более подробно http://www.bieberlabs.com/archives/2004/11/30/using-svk/

Я думаю, что доступна версия SVK для Windows ( SVKWin32 ), и TortoiseSVN может затем использовать локальное зеркало хранилища для обновления / фиксации.

0 голосов
/ 22 февраля 2009

Что ж, большинство людей утверждают, что если ваш «набор изменений достаточно велик», вы обязательно должны проверить изменения (в необходимой ветке)!

...