Я хотел бы преобразовать хранилище от Подрывной деятельности до Подвижного, но когда я первоначально открыл хранилище, я сделал это самым ленивым возможным способом. Со временем структура продолжала превращаться и ухудшаться (этому 5 лет в этом пункте). Тем не менее, я хотел бы сохранить как можно больше истории, даже если я должен испачкаться и вручную сшить вещи назад вместе.
Без дальнейшей суматохи текущая структура похожа так:
svn://svn.example.com/Example
+ trunk
+ BigProject
+ BinaryDepedencies
+ branches
+ BigProject
+ branch1
+ feature1
+ maintenance1
+ ...
+ tags
+ BigProject
+ tag1
+ tag2
+ ...
+ projects
+ small_project1
+ small_project2
+ small_project3
+ ...
Учитывая, что это - просто новая структура, есть ли какая-либо надежда на это хранилище? Если нет никакой надежды, у любого есть хороший подход для восстановления истории вручную в Подвижном (или базар).
Кроме того, по различным причинам я не буду в состоянии мерзавец использования, если не будет пуленепробиваемая стратегия преобразовать этот определенный repo от Подрывной деятельности до мерзавца к hg/bzr.
Одной стратегии может быть преобразование багажника. Возможно, вам придется играть в несколько игр, если ваш багажник переместился, но это не должно быть слишком сложно.
Другой инструмент в вашем арсенале может быть HG-> Hg Convision и расширение ребазы. Вы можете использовать их, чтобы скриться со своим деревом после того, как у вас есть вещи в репозитории и трансплантации HG на ветвях после того, как вы их преобразовали. Или трансплантат на новых кусках вашей истории багажника после его перемещения.
Вот приятная связь с документацией на расширении Mercurial Rebase .
В принципе, вот стратегия, которую вы будете следовать ... Во-первых, используйте расширение или HGSVN для преобразования частей репозитория. Это может привести к нескольким линиям багажника или в ветвях, которые находятся в отдельном репозитории от основной линии.
Если у вас есть два раздела багажника в отдельных репозиториях, а тот, который в каталоге называется вторым
. Прямой
непосредственно следует тот в каталоге , сначала
, вы можете сделать это:
cd second
hg log -r 0
# Note the revision hash
cd ../first
hg tip
# Again, note the revision hash
hg pull -f ../second
hg rebase --source <revision hash from hg log -r 0> --dest <revision hash from hg tip>
Это приведет к одному участку сундука на другую часть багажника.
Если у вас есть филиал в отдельном репозитории, процедура слегка сложнее:
cd branch
hg log -r 0
# Note the revision hash
cd ../trunk
# Find the revision that the branch branches off from and note its hash.
# We will call this revision the 'branch base'.
hg pull -f ../branch
hg rebase --source <revision hash from hg log -r 0> --dest <revision hash of branch base>
, которая привидет к ветви на главное дерево.
Согласно Преобразовать Документы расширения , что-то вроде следующее должно работать.
$ cat > ~/.hgrc <<EOF
[extensions]
hgext.convert=
EOF
$ hg convert --config convert.svn.trunk trunk/BigProject --config convert.svn.branches branches/BigProject --config convert.svn.tags tags/BigProject svn://svn.example.com/Example newhgrepo