Этот пост может быть немного длинным, но если вы думаете, что можете помочь, пожалуйста, прочитайте его, потому что в буквальном смысле это будет спасатель.
Вот сценарий.Я работаю над проектом [для KDE], в котором размещен ствол, скажем: http://ubersvn.org/home/uber/trunk/myapp. Также я работаю над веткой, скажем: http://ubersvn.org/home/uber/branches/work/myapp-mod. Это то, что я 'я делал:
После создания ветви я работал над своей локальной рабочей копией ветви и часто использовал для извлечения изменений из ствола.Мне сказали, что это поможет в предотвращении множества конфликтов, когда дело доходит до окончательного объединения в магистраль.Итак, довольно часто я делал:
svnmerge.py merge
svn commit -F svnmerge-commit-message.txt
После того, как работа была закончена, пришло время объединить ветвь с магистралью.Сначала я проверил рабочую копию ствола:
svn co svn+ssh://ubersvn.org/home/uber/trunk/myapp
cd myapp
Затем я следовал документации 1016 * для слияния назад:
svnmerge init svn+ssh://ubersvn.org/home/uber/branches/work/myapp-mod
И для слияния назад идалее:
svnmerge merge --bidirectional -S svn+ssh://ubersvn.org/home/uber/branches/work/myapp-mod
И вот тут начинается проблема. Во-первых, , судя по всему, он объединяет каждую ревизию с тех пор, как я разветвился.Если он делает это, я не вижу смысла в том, чтобы я часто вытаскивал из ствола и постоянно обновлял свою ветку.Тем не менее, я просто предполагаю, что svnmerge каким-то образом использует его для разрешения конфликтов во время слияния.Пока все хорошо.
Во-вторых, внезапно закончилось с ошибкой, которая звучала что-то вроде:
Attempt to add tree conflict that already exists
Небольшой поиск в Интернетесказал мне, что проблема может быть решена следующим образом:
svn resolve --accept working -R .
И тогда это показывает, что некоторые разрешения были очищены и все.Тем не менее, теперь, когда я делаю это:
svnmerge merge --bidirectional -S [BRANCH_URL]
, он говорит: «Информация svnmerge не найдена».Я попытался использовать svnmerge init BRANCH_URL
, но он говорит, что '.' has local modifications. It must be clean
.
Итак, теперь я сталкиваюсь с проблемами:
- Я не могу вытащить из своей ветки, так как есть локальныеИзменения
- Чтобы очистить мою рабочую копию, я должен выполнить коммит, что не вариант, так как слияние происходит только наполовину, и это определенно сломало бы ствол.
- Мои файлы полностью несовместимы.Я не знаю, как были объединены ревизии, есть файлы, которые включают в себя «mylittleapp.h», но «mylittleapp.h» был создан в более поздней ревизии.
- ** Существует огромное количество конфликтов** для ** КАЖДОГО ** нового файла, который был добавлен в мою ветку.Я ** абсолютно ** не понимаю этого.Я был ЕДИНСТВЕННЫМ разработчиком, работавшим над этими файлами, эти файлы не могли быть в багажнике в любой момент времени.Почему в этих файлах так много конфликтов?
- Существует огромное количество файлов с именами `mybigapp.h.merge- (справа | слева) .r [0-9] +` и `mybigapp.h.working`.`mybigapp.h` сам по себе полон конфликтов.Так много конфликтов, что по-человечески невозможно разрешить.
- Поскольку половина файлов предполагает наличие файла, которого на самом деле нет, я не могу проверить или сделать что-либо, пока не получу файл.И я просто не могу получить какие-либо более поздние ревизии после ошибки «попытка добавить конфликт дерева».
Итак, как мне продолжить отсюда?Похоже, одно решение состоит в том, чтобы просто отличиться от ветви, применить к стволу и затем зафиксировать.Но в соответствии с политикой организации, в которой я работаю, это не приемлемо.Любая помощь очень ценится, и я был бы очень благодарен.
Спасибо, Рохан