2009-08-03 23 views
4

Можно создать дубликат:
Mercurial: copying ONE file and its history to another repositoryИзвлечение одного файла из другого ртутный хранилища

У меня есть несколько хранилищ в моей локальной машине. Один из них - мой основной код, другой - полезный код/​​инструменты. Это два принципиально разных соглашения. Это может иметь смысл настроить новое репо и вытащить эти два в качестве суб-репозиций, но я хочу подождать, пока Mercurial devs не будут отмечать субрепозиции как не экспериментальные, прежде чем я это сделаю.

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

+0

вопрос, который вас интересует? Вы хотите получить только один файл? – f0b0s

+0

Да. Я хочу захватить 1 файл и его историю изменений. –

+0

тот же Q спросил здесь, http://stackoverflow.com/questions/3643313/mercurial-copying-one-file-and-its-history-to-another-repository, с большей ясностью в вопросе и ответе –

ответ

7

Я бы использовал функцию subrepo, которая появилась в сети 1.3. Это может измениться незначительно, но вы не останетесь с высокой и сухой обратной совместимостью.

Если вы не можете заставить себя так, то, что вам нужно сделать, это:

  1. использование hg convert с filemap, который удаляет все файлы, кроме того, вы хотите, и конвертировать из репо с синглом полезный файл на новый репозиторий, содержащий только этот файл и всю свою историю
  2. затем hg pull из нового гуська-полная история репо в целевом репозиторий
  3. hg merge в целевом репо, и вы будете иметь этот файл с все это история

Другой вариант: все инструменты repo, используйте grepdiff (часть diffftools), чтобы ограничить только один файл, а затем импортировать в целевое репо, но это безумие.

+0

Шаг 1.5: Обновление hg. :-) –

+0

Я не думаю, что обновление было бы необходимо. Ваш рабочий каталог в целевом репо был бы на старом наконечнике, и «hg merge» слился бы в новую другую голову правильно. –

+0

«hg update» (вероятно) не требуется для того, чтобы этот процесс функционировал, но если вы хотите проверить вновь созданное репо, чтобы убедиться, что оно правильно, тогда не забудьте обновить. Я забыл и очень запутался, когда новый каталог был пуст. –

0

может быть

hg export 

также может помочь вам.

2

Короткий ответ, вы не можете скопировать файл и свою историю просто, как указано в этой теме:

https://www.mercurial-scm.org/pipermail/mercurial/2009-April/025105.html

Я относительно новым для DVCS, и вы действительно имеете думать о каждом репо как о самодостаточном пакете. Не похоже на svn или p4, где вы можете вставлять разные проекты из корня и настраивать его, как вам нравится, и делать частичные проверки репо. (Тем не менее, мне очень нравится гибкость, позволяющая быстро клонировать репозитории, чтобы попробовать что-то сделать. И возможность совершать на локальной машине.)

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

  • Вы можете посмотреть на сайте:

    hg cat 
    

    это, вероятно, включать в себя написание сценария для передачи истории, то есть совершать N ревизий в целевом репо с результатами рт.ст. кошачьих от источника. Интересно, есть ли расширение для этого?

  • Вы можете получить журнал файла, который вы хотите скопировать, и вставить в комментарий фиксации. Это не в метаданных, но у вас есть запись и все хеши и т. Д.

Смежные вопросы