Возвращаясь после слияния, плохая идея? - PullRequest
3 голосов
/ 30 апреля 2010

Я новичок в Subversion. Недавно я провел некоторые разработки в двух разных ветках, где одна ветвь была ветвью другой. Я слил некоторые изменения от первой ветви до ствола. Однако при попытке объединить изменения из другой ветки в магистраль все пошло наперекосяк. То есть у меня было много конфликтов, некоторые из которых я решил (но не зафиксировал), а некоторые нет. Что еще хуже, многие изменения, которые я внес в ветку, по какой-то причине не были объединены в ствол. Теперь мой единственный вопрос: могу ли я просто восстановить свою рабочую копию, чтобы вернуть транк в его прежнее состояние? То есть я что-нибудь испорчу, сделав это? Мое учение - начинать все сначала и делать это более осторожно "вручную".

Thanx!

Ответы [ 4 ]

5 голосов
/ 30 апреля 2010

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

Чтобы минимизировать конфликты слияния, вы хотите

  • делать по одному слиянию за раз (Если по какой-то причине вы хотите совершить несколько слияний за раз, вы можете создать временную копию своей цели слияния, объединить в нее несколько ветвей, слить ее обратно в свою цель слияния и удалить это потом.)
  • сначала объединить изменения из магистрали в ветку, разрешив все возникающие конфликты
  • всегда объединить обратно изменения из ветви в ствол (или другую ветку, если они были созданы путем копирования) с использованием svn merge --reintegrate
  • выбрасывайте ветки, с которых вы реинтегрировались, и создавайте их заново
2 голосов
/ 30 апреля 2010

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

Пока вы не сделали никаких коммитов, ствол в хранилище не будет затронут: слияние только изменяет файлы на стороне клиента.

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

1 голос
/ 30 апреля 2010

Если вы еще не совершили коммит и сделали возврат, у вас будет последняя версия из ствола.

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

0 голосов
/ 30 апреля 2010

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

Если вы слили свою ветку в рабочую копию транка, не зафиксировали ее, а затем попытались объединить другую ветку с той же рабочей копией, это легко: просто верните свою рабочую копию. Вы потеряете все, что не совершено.

Если вы слили свою ветку в транк, зафиксировали это, и теперь вы хотите отменить его, вы можете отменить изменения этого коммита (это все еще называется «возврат», но это другая операция). Например, если вы используете TortoiseSVN:

  1. Начните с чистой рабочей копии транка (без локальных изменений)
  2. Используйте Черепаху для просмотра журнала из вашей рабочей копии
  3. Щелкните правой кнопкой мыши ревизию, которую вы хотите отменить (ту, в которой вы совершили слияние), и выберите «Отменить изменения из этой ревизии».
  4. Совершите это, и вы фактически отменили слияние.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...