Подвижный Subrepos - Как Вы создаете их и как они работают?

Ситуация

У меня есть два решения.NET (Foo и Bar) и общая библиотека, которая содержит ProjectA, ProjectB и ProjectC. Foo и Bar ссылка один или несколько проектов библиотеки, но проекты библиотеки не расположены в Foo и Bar Папки решения.

Структура каталогов:

-- My Documents*
   -- Development
      -- Libraries
         -- ProjectA
         -- ProjectB
         -- ProjectC
   -- Projects
      -- Foo
         -- Solution
            -- .hg
            -- .hgignore
            -- Foo { Project Folder }
            -- FooTests { Project Folder }
            -- Foo.sln { References ProjectA }
            -- Foo.suo
      -- Bar
         -- Solution
            -- .hg
            -- .hgignore
            -- Bar { Project Folder }
            -- BarTests { Project Folder }
            -- Bar.sln { References ProjectA and ProjectB }
            -- Bar.suo

*увы, я все еще использую Windows XP...

Подвижные подрепозитории

Цель - я хочу настроить subrepos так, чтобы я мог сохранить исходный код для любых проектов ссылочной библиотеки в моем Foo и Bar репозитории.

Согласно этой странице (который является буквально единственной документацией, которую я могу найти на subrepos), настраивая subrepo требует выполнения следующих команд от окна консоли DOS:

1| $ hg init main
2| $ cd main
3| $ hg init nested
4| $ echo test > nested/foo
5| $ hg -R nested add nested/foo
6| $ echo nested = nested > .hgsub
7| $ hg add .hgsub
8| $ ci -m "initial commit"

Вопросы

  1. Кто-либо из этих шагов могут быть выполнены с TortoiseHG с версии 0.9.2? Если да, как? Я - вполне уверенные строки 1-3, может, но я не знаю о строках 4-7. Ни одно из этого, кажется, не документируется в TortoiseHG.
  2. Что делает вышеупомянутый код, делают (линию за линией, объяснение очень ценилось бы). Вот некоторые конкретные вопросы, которые пришли на ум, поскольку я пытался дешифровать его:
    • Что делает > ? Я пытался перерыть Подвижные документы для >, но ничего не нашел.
    • В строке 5, я не понимаю что nested/foo . Где сделал foo произойти из? Что foo? Репозиторий? Папка?
    • Строка 6 - этот полностью экранирует меня.
    • В строке 7, я принимаю .hgsub добавляется к main? Или это добавляет к nested?
  3. Скажем, я бужу свой набор subrepos и мой Bar репозиторий теперь до пересмотра 10. Если я пытаюсь обновить свой рабочий каталог к пересмотру 7, будет эта причина мои папки библиотеки (My Documents/Development/Libraries/ProjectA и .../Libraries/ProjectB) обновить к тому, что хранится в пересмотре 7 также?

Обновление

Я добавил 8-ю строку кода: ci -m "initial commit". Это делает две вещи: (1) добавляет .hgsubstate файл к основному repo и (2) фиксируют все изменения, включая новый subrepo в основной репозиторий (с сообщением "начальная буква фиксирует"). Цель .hgsubstate файла состоит в том, чтобы отслеживать состояние всего subrepos, поэтому если Вы возвратитесь к более раннему пересмотру, то это захватит корректный пересмотр от всего subrepos также.


Обновление 2 - некоторые инструкции

После дальнейшего экспериментирования я думаю, что могу теперь обеспечить шаги для решения моей исходной проблемы (использующий главным образом Windows Explorer и TortoiseHG):

Создание subrepo

  1. Libraries/ProjectA, Libraries/ProjectB, и основные репозитории (Projects/Foo/Solution и Projects/Bar/Solution) должны быть отдельные репозитории.
  2. Открытый Projects/Foo/Solution.
  3. Клон от Libraries/ProjectA кому: Projects/Foo/Solution.
  4. Добавить ProjectA к Foo репозиторий.
  5. Используйте текстовый редактор для создания названного файла .hgsub, содержа следующее:

    ProjectA = ProjectA
    
  6. Откройте окно консоли DOS и введите следующие команды (см. примечание ниже):

    cd c:\...\Projects\Foo\Solution
    hg ci -m "Committing subrepo "ProjectA"
    
  7. Для Bar, шаги являются в основном тем же, кроме .hgsub файла должен содержать записи для обоих проектов, как это:

    ProjectA = ProjectA  
    ProjectB = ProjectB
    

Примечание: начиная с TortoiseHG 0.10 (который намечен на март), Вы сможете использовать HG Commit окружите команду, чтобы сделать это, но на данный момент, необходимо использовать командную строку.

После того как это все настраивается, это становится немного легче.

Фиксация изменений - для фиксации изменений в Foo или Bar, Вы делаете a Synchronize/Pull операция для каждого subrepo для получения subrepos в синхронизации с последними изменениями в репозиториях проекта библиотеки. Затем Вы снова используете командную строку для фиксации изменений (пока версия 0.10, когда можно просто использовать TortoiseHG для фиксации).

При обновлении рабочего каталога к более раннему пересмотру - Это, кажется, работает довольно обычно с TortoiseHG и, кажется, не требует использования никаких команд DOS. Для фактической работы с более ранним пересмотром в Visual Studio необходимо будет сделать a Synchronize/Push операция для помещения более старой версии проектов библиотеки назад в Libraries/ProjectX папка.

Так, как мне нравится TortoiseHG за простые задачи, вероятно, лучше записать пакетные файлы для часто используемых subrepo операций (особенно обновляющий).

Надежда это помогает кому-то в будущем. Если Вы видите какие-либо ошибки, сообщите мне (или не стесняйтесь редактировать себя, если Вы можете).

36
задан Vadim Kotov 22 February 2018 в 10:20
поделиться

2 ответа

Вы, наверное, могли бы попробовать эту штуку и выучить ее быстрее, чем писать свой вопрос, но я укушу.

Может ли любой или все эти шаги быть казненный с TortoiseHG, начиная с версия 0.9.2? Если да, то как?

TortiseHG пока не ставит GUI-обёртки вокруг создания sub-repo, но TortiseHG всегда отлично работал с командной строкой. Используйте командную строку для создания и их, и вы можете начинать.

Что делает приведённый выше код сделать (построчно объяснение было бы очень высоко оценено).

hg init main  # creates the main repo
cd main # enter the main repo
hg init nested # create the nested. internal repo
echo test > nested/foo # put the word test into the file foo in the nested repo
hg -R nested add nested/foo # do an add in the nested repo of file foo
echo nested = nested > .hgsub # put the string "nested = nested" into a file (in main) named .hgsub
hg add .hgsub # add the file .hgsub into the main repo

Вот некоторые специфические вопросы, которые пришли мне в голову, когда я был пытаясь расшифровать его: Что делает >?

Это не имеет ничего общего с меркуриальным, это стандартная оболочка (unix и dos) для "записи результата в файл с именем X"

В 5-й строке я не делаю понять, что такое гнездо/футболка. Где откуда взялся Фу? Что такое "Фу"? A Хранилище? Папка?

Это файл в повестке. Foo - традиционное произвольное имя, а произвольное содержимое - строка "test"

Line 6 - это один меня полностью сбивает с толку.

Он помещает содержимое в .hgsub, необходимое для того, чтобы сказать, что гнездо является вложенным repo по имени и расположено в гнезде.

В строке 7, Я предполагаю, что .hgsub добавляется к Главное? Или он добавляется во вложенный?

main

Let's say I get my subrepos set set, и моё хранилище в баре теперь ревизия 10. Если я попытаюсь обновить до 7-я поправка, приведет ли это к тому, что моя библиотека папки (Мой Документы/Разработка/Библиотеки/ПроектА и .../Библиотеки/ПроектБ) для обновления к тому, что хранится в ревизии 7 как Ну? Учитывая, что Фу также ссылается на Библиотеки/ПроектА, это может привести к тому. интересно!

Номер редакции не будет нести через себя, но у вас есть контроль, редактируя файл .hgsubstate.

20
ответ дан 27 November 2019 в 06:17
поделиться

Просто быстрое обновление после выпуска TortoiseHg 1.0.

Поддержка subrepo в THG 1 достаточно хороша, чтобы вы могли выполнять примеры шагов из проводника Windows. Единственное, что я не мог сделать из проводника, это шаг 6:

echo nested = nested > .hgsub

Проводник Windows (по крайней мере, в XP) сообщает об ошибке переименования «Вы должны ввести имя файла». если вы попытаетесь переименовать «New Text Document.txt» в «.hgsub».* 8 ')

Изменить: Между прочим, если вы используете и hg через TortoiseHg, и командную строку, и у вас еще нет Microsoft «Command Here» PowerTool , я очень рекомендую Это. Он добавляет пункт контекстного меню «Открыть командное окно здесь» в каждый каталог в проводнике Windows, что упрощает открытие командных окон в любом месте, где они вам нужны.

6
ответ дан 27 November 2019 в 06:17
поделиться
Другие вопросы по тегам:

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