Ответ 1
Это сложная проблема. Почему подход к решению по-разному:
https://bitbucket.org/durin42/hgsubversion/wiki/Home
Это расширение для Mercurial, которое позволяет вам получить к нему доступ как SVN-клиент, может ли он работать для вас?
Из-за рабочих политик я вынужден использовать Subversion. В настоящее время я разработал некоторый код с использованием Mercurial, и мне нужно преобразовать этот репозиторий в новый репозиторий Subversion. В текущем репозитории Mercurial также содержатся части старого кода, которые я скопировал из другого репозитория SVN (драйвер HW), и этот код содержит ключевые слова (например, $Id: ...$
), которые были расширены, когда я скопировал код.
Мой текущий подход к преобразованию:
hg convert --dest-type svn repository.hg repository.svn
Это работает, к сожалению, не сохраняет отметки времени Mercurial версий. Кроме того, он расширяет теги в некоторых устаревших частях кода, где кто-то писал $Id: ...$
stuff.
Вопросы:
Извините, если на этот вопрос уже был дан ответ, я интенсивно искал Google и здесь, но я не могу найти ответ на эту проблему. Особенно проблема с меткой времени должна быть тем, с чем уже сталкиваются другие.
Cheers, Н.
EDIT:. С тех пор я создал script, который извлекает временные метки из файла экспорта Mercurial и обновляет файл дампа Subversion, который является не чем иным, как kludge, но он работает. Проблема $Id:
до сих пор остается нерешенной.
Это сложная проблема. Почему подход к решению по-разному:
https://bitbucket.org/durin42/hgsubversion/wiki/Home
Это расширение для Mercurial, которое позволяет вам получить к нему доступ как SVN-клиент, может ли он работать для вас?
Я хочу повторно предложить hgsubversion в качестве решения. В обычном случае он используется для доступа к репозиторию Subversion с помощью hg
, но вы также можете использовать его для преобразования репозитория Mercurial в Subversion, если вы не боитесь работать над своей историей изменений. (Если вы знаете, как работать с наборами изменений, у вас есть довольно немного контроля над процессом.)
По существу, вам необходимо выполнить следующие действия:
hg pull
этот путь SVN (используя hgsubversion) в ваш репозиторий Mercurial. Для этого путь Subversion должен быть непустым, но до тех пор, пока не будет дублирования файлов в репозитории Mercurial, это должно быть хорошо.hg push
, чтобы отправить результат обратно в Subversion. Линейный набор изменений, которые сходят с прежнего главы репозитория Subversion, будет добавлен в путь Subversion.Отметьте эту статью в блоге для некоторых конкретных команд командной строки, которые вы можете использовать.
Я попытался заменить ключевое слово один раз на SVN, и мне пришлось добавить свойство svn:keywords
в рабочую папку с указанием того, какое ключевое слово (и) следует заменить. Таким образом, удаление этого свойства должно выполнять эту работу.
Эта статья о переполнении стека, возможно, связана с этим вопросом.
Насколько я понимаю вашу проблему сейчас: у вас есть репозиторий Hg, который был однажды преобразован из SVN, где использовалось расширение ключевого слова. Теперь расширенные ключевые слова остаются неизменными в репо Hg. Теперь вы хотите удалить эти ключевые слова (или только их расширенные значения) из истории Hg, сохранить автора, дату/время, сообщение фиксации и, конечно, измененные файлы.
Это просто идея, я никогда не делал этого на практике, но... Говоря просто о меркуриальном, я думаю, что это можно сделать с помощью комбинации обычного меркуриального поведения, только для одной ветки и без тегов и других ветки:
hg log > logfile.txt
поверх исходного репо на этой ветке, которую вы хотите изменить.hg addremove
hg commit -m ... -d ... -u ...
Недостатком является то, что изменения будут получать новые значения хэширования, поэтому теги и закладки должны быть обновлены.
Если есть другие ветки, которые необходимо перенести:
Возможно, предстоит еще одна работа, но я думаю, что это может сработать. Как сказано ранее, я никогда не делал этого.