gpt4 book ai didi

version-control - Mercurial Subrepos-如何创建它们以及它们如何工作?

转载 作者:行者123 更新时间:2023-12-03 07:51:33 50 4
gpt4 key购买 nike

情况

我有两个.NET解决方案(FooBar)和一个包含ProjectA,ProjectB和ProjectC的公共(public)库。 FooBar引用一个或多个库项目,但是这些库项目不在FooBar解决方案文件夹中。

目录结构:

-- 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

* ala,我仍在使用Windows XP ...

Mercurial子存储库

目标-我想设置子仓库,以便可以将任何引用的库项目的源代码存储在 FooBar存储库中。

根据 this page(这实际上是我可以在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"

问题
  • 从0.9.2版开始,是否可以使用TortoiseHG执行任何或所有这些步骤?如果是,怎么办?我很确定1-3行可以,但是我不知道4-7行。 TortoiseHG中似乎没有任何记录。
  • 上面的代码做什么(逐行解释将不胜感激)。以下是我在尝试解密时想到的一些具体问题:
  • >是做什么的?我尝试在Mercurial文档中搜索>,但未找到任何内容。
  • 在第5行中,我不知道nested/foo是什么。 foo来自哪里?什么是foo?仓库?一个文件夹?
  • 6号线-这个完全让我感到困惑。
  • 在第7行中,我假设.hgsub已添加到main中?还是将其添加到nested中?
  • 假设我设置了子存储库,并且Bar存储库现在已达到修订版10。如果我尝试将工作目录更新为修订版7,这会导致我的库文件夹(My Documents/Development/Libraries/ProjectA.../Libraries/ProjectB)更新到所存储的内容在修订版7中也是如此?

  • 更新

    我添加了第八行代码: ci -m "initial commit"。这有两件事:(1)将.hgsubstate文件添加到主仓库中,并且(2)将所有更改(包括新的子仓库)提交到主存储库中(消息为“initial commit”)。 .hgsubstate文件的目的是跟踪所有子存储库的状态,因此,如果您返回到较早的修订版,它也会从所有子存储库中获取正确的修订版。

    更新2-一些说明

    经过进一步的实验,我认为我现在可以提供解决原始问题的步骤(主要使用Windows Explorer和TortoiseHG):

    创建子仓库
  • Libraries/ProjectALibraries/ProjectB和主要存储库(Projects/Foo/SolutionProjects/Bar/Solution)必须是单独的存储库。
  • 打开Projects/Foo/Solution
  • Libraries/ProjectA克隆到Projects/Foo/Solution
  • ProjectA添加到Foo存储库。
  • 使用文本编辑器创建一个名为.hgsub的文件,其中包含以下内容:
    ProjectA = ProjectA
  • 打开DOS控制台窗口,然后输入以下命令(请参见下面的注释):
    cd c:\...\Projects\Foo\Solution
    hg ci -m "Committing subrepo "ProjectA"
  • 对于Bar,步骤基本相同,只是.hgsub文件应包含两个项目的条目,如下所示:
    ProjectA = ProjectA  
    ProjectB = ProjectB

  • 注意:从TortoiseHG 0.10(计划于3月开始)开始的,您将可以使用 HG Commit shell命令来执行此操作,但是现在,您必须使用命令行。

    一旦完成所有设置,它就会变得容易一些。

    提交更改-要提交对 FooBar的更改,您需要对每个子仓库执行 Synchronize/Pull操作,以使子仓库与库项目存储库中的最新修订保持同步。然后,您再次使用命令行来提交更改(直到版本0.10时才可以使用TortoiseHG提交)。

    将工作目录更新到较早的版本-这似乎与TortoiseHG正常工作,并且似乎不需要使用任何DOS命令。要在Visual Studio中实际使用早期版本,您需要执行 Synchronize/Push操作,以将旧版本的库项目放回 Libraries/ProjectX文件夹中。

    尽管我喜欢TortoiseHG来完成简单的任务,但最好为经常使用的子仓库操作(尤其是更新)编写批处理文件。

    希望这对以后的人有所帮助。如果您发现任何错误,请告诉我(如果可以,请随时进行编辑)。

    最佳答案

    您可能会尝试这些东西并比编写您的问题花更多的时间来学习它,但我会咬一口。

    Can any or all of these steps be executed with TortoiseHG, as of version 0.9.2? If yes, how?



    TortiseHG尚未将GUI包装器放在子仓库的创建上,但是TortiseHG一直在使用命令行方面做得很好。使用命令行创建它们,您就可以开始了。

    What does the above code do (a line-by-line explanation would be much appreciated).


    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

    Here are some specific questions that came to mind as I was trying to decipher it: What does > do?



    这与标准 shell 程序(unix和dos)无关,用于“将结果放入名为X的文件中”

    In line 5, I don't understand what nested/foo is. Where did foo come from? What is foo? A repository? A folder?



    这是子仓库中的文件。 Foo是传统的任意名称,任意内容均为字符串“test”

    Line 6 - this one completely baffles me.



    它会将内容放入.hgsub中,这是必须要说的是nested是名为nested并位于nested的嵌套存储库。

    In line 7, I assume .hgsub is being added to main? Or is it being added to nested?



    主要

    Let's say I get my subrepos set up, and my Bar repository is now up to revision 10. If I attempt to update to revision 7, will this cause my library folders (My Documents/Development/Libraries/ProjectA and .../Libraries/ProjectB) to update to whatever is stored in revision 7 as well? Given that Foo also refers to Libraries/ProjectA, this could get interesting!



    修订号不会保留,但您可以通过编辑.hgsubstate文件来控制。

    关于version-control - Mercurial Subrepos-如何创建它们以及它们如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2083393/

    50 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com