Делающие подвижные подрепозитории ведут себя как внешний облик подверсии

FAQ и hginit.com были действительно полезны для помощи мне сделать переход от svn до hg.

Однако когда дело доходит до использования функции подрепозитория Hg манерой внешних пользователей подверсии, я попробовал все и не могу копировать хорошее поведение svn внешнего облика.

Вот самый простой пример того, что я хочу сделать:

  1. Репозиторий "lib" Init Этот репозиторий никогда не должен использоваться в качестве автономного; это всегда включается основными репозиториями как подрепозиторий.

  2. Init одни или несколько включая репозитории Для хранения примера простым я буду "init" репозиторий, названный "основным"

  3. Имейте "основной", включают "lib" как подрепозиторий

  4. Значительно - И ВОТ то, ЧТО я не МОГУ ВЗЯТЬСЯ ЗА РАБОТУ: Когда я изменяю файл в "основном / lib", и я продвигаю модификацию, затем то изменение продвинуто в репозиторий "lib" - НЕ к копии в "основном".

Командные строки говорят громче, чем слова. Я попробовал столько вариаций на эту тему, но вот суть. Если кто-то может ответить в командных строках, я буду навсегда благодарен!

1. Репозиторий "lib" Init

CD $/home/moi/hgrepos ##, Где я храню свои hg репозитории на моем основном сервере

$ hg init lib

$ повторяют "нечто"> lib/lib.txt

$ hg добавляют lib

$ hg ci-A-m "lib" lib Init

2. Init "основной" репозиторий, и включают "lib" как subrepos

CD $/home/moi/hgrepos

$ hg init основной

$ повторяют "нечто"> main/main.txt

$ hg добавляют основной

Основной CD $

$ hg клонируют../освобождаем lib

$ повторяют "lib=lib"> .hgsub

$ hg ci-A-m "основной Init".

Это все хорошо работает, но когда я делаю клон "основного" репозитория, и делаю локальные модификации в файлы в "основном / lib" и продвигаю их, изменения продвинуты к "основному / lib", НЕ к "lib".

В COMMAND-LINE-ESE ЭТО - ПРОБЛЕМА:

$/home/moi/hg-test

$ hg клонируют ssh://moi@www.moi.com/hgrepos/lib lib

$ hg клонируют ssh://moi@www.moi.com/hgrepos/main основной

Основной CD $

$ повторяют нечто>> lib/lib.txt

$ hg Св.

M lib.txt

$ hg com-m "Измененный lib.txt, из основного repos" lib.txt

$ hg нажатие

продвижение к ssh://moi@www.moi.com/hgrepos/main/lib

Та последняя строка вывода от hg показывает проблему.

Это показывает, что я сделал модификацию к КОПИИ файла в lib, НЕ в файл в репозитории lib. Если бы это работало, поскольку я хотел бы, чтобы это работало, нажатие было бы к hgrepos/lib, НЕ к hgrepos/main/lib. Т.е. я видел бы:

$ hg нажатие

продвижение к ssh://moi@www.moi.com/hgrepos/lib

ЕСЛИ МОЖНО ОТВЕТИТЬ НА ЭТО В ТЕРМИНАХ

ИЗ КОМАНДНЫХ СТРОК, А НЕ НА АНГЛИЙСКОМ ЯЗЫКЕ,

Я БУДУ ВЕЧНО БЛАГОДАРЕН!

Заранее спасибо!

Emily в Портленде

6
задан Emily Dickinson 3 April 2010 в 05:05
поделиться

2 ответа

Проблема в вашем файле .hgsub. Он указывает на то, где находится репозиторий lib, поэтому, если lib является родственником main, он должен быть:

lib=../lib

Также ваши строки hg add lib и hg add main не делают смысл. К какому репо, помимо main и lib, они добавляются? Вы запускаете их в / home / moi / hgrepos .

Вот ваш сценарий с некоторыми хитростями:

+ cd /home/ry4an/hgtest
+ hg init lib
+ echo foo
+ cd lib
+ hg commit -A -m Init lib
adding lib.txt
+ cd /home/ry4an/hgtest
+ hg init main
+ echo foo
+ cd main
+ echo lib=../lib
+ hg clone ../lib
destination directory: lib
updating to branch default
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ hg add .hgsub main.txt
+ hg commit -m Init main: initial file and a .hgsub
committing subrepository lib
+ cd /home/ry4an/hgtest
+ hg clone main main-clone
updating to branch default
pulling subrepo lib
requesting all changes
adding changesets
adding manifests
adding file changes
added 1 changesets with 1 changes to 1 files
3 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ cd main-clone
+ echo foo
+ hg commit -m Modified lib.txt, from inside the main repos
committing subrepository lib
+ hg push
pushing to /home/ry4an/hgtest/main
pushing subrepo lib
searching for changes
adding changesets
adding manifests
adding file changes
added 1 changesets with 1 changes to 1 files
searching for changes
adding changesets
adding manifests
adding file changes
added 1 changesets with 1 changes to 1 files

Чтобы сделать это через ssh: //, вам нужно сделать всего одно изменение. При клонировании основного репо изменить hg clone main main-clone на hg clone ssh: // host / hgtest / main main-clone - клонирование основного автоматически клонирует lib - это выгода субрепо.

Вот протокол этой работы:

+ cd /home/ry4an/hgtest
+ hg init lib
+ echo foo
+ cd lib
+ hg commit -A -m Init lib
adding lib.txt
+ cd /home/ry4an/hgtest
+ hg init main
+ echo foo
+ cd main
+ echo lib=../lib
+ hg clone ../lib
destination directory: lib
updating to branch default
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ hg add .hgsub main.txt
+ hg commit -m Init main: initial file and a .hgsub
committing subrepository lib
+ cd /home/ry4an/hgtest
+ hg clone ssh://localhost/hgtest/main main-clone
The authenticity of host 'localhost (::1)' can't be established.
RSA key fingerprint is 0c:58:d6:d3:d3:16:14:ee:3b:be:01:bc:c7:3c:92:0b.
Are you sure you want to continue connecting (yes/no)? yes
ry4an@localhost's password: 
requesting all changes
adding changesets
adding manifests
adding file changes
added 1 changesets with 3 changes to 3 files
updating to branch default
pulling subrepo lib
ry4an@localhost's password: 
requesting all changes
adding changesets
adding manifests
adding file changes
added 1 changesets with 1 changes to 1 files
3 files updated, 0 files merged, 0 files removed, 0 files unresolved
remote: Warning: Permanently added 'localhost' (RSA) to the list of known hosts.
+ cd main-clone
+ echo foo
+ hg commit -m Modified lib.txt, from inside the main repos
committing subrepository lib
+ hg push
ry4an@localhost's password: 
pushing to ssh://localhost/hgtest/main
pushing subrepo lib
ry4an@localhost's password: 
searching for changes
remote: adding changesets
remote: adding manifests
remote: adding file changes
remote: added 1 changesets with 1 changes to 1 files
searching for changes
remote: adding changesets
remote: adding manifests
remote: adding file changes
remote: added 1 changesets with 1 changes to 1 files
8
ответ дан 10 December 2019 в 02:45
поделиться

К сожалению, извините за форматирование в предыдущем ответе. Вот оно опять отформатировано!

Итак, вот два сценария, с которыми столкнется большинство людей:

A) Использование субхранилищ в полностью локальной ситуации. По сути, это решение Райана. Я полагаю, что в этой лодке будут только разработчики, работающие в одиночку.

    cd /home/moi/hgrepos
    hg init lib
    cd lib
    echo foo > lib.txt
    hg ci -A -m Init

    cd /home/moi/hgrepos
    hg init main
    cd main
    echo foo > main.txt
    echo lib = ../lib > .hgsub
    hg clone ../lib
    hg add .hgsub main.txt
    hg ci -m Init

    cd /home/moi/hgrepos
    hg clone main main-clone
    cd main-clone/lib
    echo "Modified while on main trunk" >>lib.txt
    hg commit -m "Modified lib.txt, while on main trunk"
    hg push
    cd /home/moi/hgrepos/lib
    hg update
    1 files updated, 0 files merged, 0 files removed, 0 files unresolved

    cat lib.txt
    foo
    Modified while on main trunk

----------------------------------------------- ------------------

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

1) Настроить lib

cd /home/moi/hgrepos
hg init lib
cd lib
echo foo > lib.txt
hg ci -A -m Init

2) Настроить main

cd /home/moi/hgrepos
hg init main
cd main
echo foo > main.txt
echo lib=ssh://moi@www.moi.com/hgrepos/lib > .hgsub
hg clone ssh://moi@www.moi.com/hgrepos/lib lib
hg add .hgsub main.txt
hg ci -m Init

3) Клонировать lib в hgtest dir

cd /home/moi/hgtest
hg clone ssh://moi@www.moi.com/hgrepos/lib lib

4) Клонировать main в hgtest dir

cd /home/moi/hgtest
hg clone ssh://moi@www.moi.com/hgrepos/main main

5) Изменить lib.txt в главном транке

cd /home/moi/hgtest/main/lib
echo "Modified while on main trunk" >>lib.txt
hg commit -m "Modified lib.txt, while on main trunk"
hg push

6) Убедитесь, что lib.txt был изменен в репозитории lib

cd /home/moi/hgtest/lib
hg pull
hg update
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
cat lib.txt
foo
Modified while on main trunk
1
ответ дан 10 December 2019 в 02:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: