【发布时间】:2010-04-03 05:05:23
【问题描述】:
FAQ 和 hginit.com 对帮助我从 svn 过渡到 hg 非常有用。
但是,当谈到以 subversion 的外部方式使用 Hg 的子存储库功能时,我已经尝试了所有方法,但无法复制 svn 外部的良好行为。
这是我想做的最简单的例子:
初始化“lib”存储库 这个存储库永远不会被用作独立的;它总是包含在 main 中 存储库,作为子存储库。
初始化一个或多个包括存储库 为了简单起见,我将“初始化”一个名为“main”的存储库
让“main”包含“lib”作为子存储库
重要的是 - 以下是我无法工作的地方: 当我修改“main/lib”中的文件并推送修改时, 然后该更改被推送到“lib”存储库——而不是副本 在“主要”内部。
命令行胜于雄辩。我在这个主题上尝试了很多变化,但这里是要点。如果有人可以在命令行中回复,我将永远感激不尽!
1。初始化“lib”存储库
$ cd /home/moi/hgrepos ## 我在主服务器上存储 hg 存储库的位置
$ hg 初始化库
$ echo "foo" > lib/lib.txt
$ hg 添加库
$ hg ci -A -m "初始化库" 库
2。初始化“主”存储库,并包含“lib”作为子存储库
$ cd /home/moi/hgrepos
$ hg init main
$ echo "foo" > main/main.txt
$ hg 添加主目录
$ cd main
$ hg clone ../lib 库
$ echo "lib=lib" > .hgsub
$ hg ci -A -m "初始化主程序" .
这一切都很好,但是当我克隆“主”存储库并制作本地 修改“main/lib”中的文件,并推送它们,更改被推送到“main/lib”, 不要“解放”。
在命令行 ESE 中,这是问题:
$ /home/moi/hg-test
$ hg clone ssh://moi@www.moi.com/hgrepos/lib lib
$ hg clone ssh://moi@www.moi.com/hgrepos/main main
$ cd main
$ echo foo >> lib/lib.txt
$ hg st
M lib.txt
$ hg com -m "修改后的 lib.txt,来自主仓库" 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
如果你能用术语回答这个问题
命令行而不是英文,
我将永远感激不尽!
提前谢谢你!
艾米丽在波特兰
【问题讨论】:
-
艾米丽,我很高兴它成功了。如何选择我的答案?这是花时间在 SO 上帮助的通常奖励。您对答案的修改通常会进入对我的评论或对您的问题进行“更新”编辑,而不是答案本身。
-
实际上,看看你的 ssh:// 指令,你想多了。按照我设置本地子存储库设置的步骤后,您可以通过 ssh 克隆“主”存储库,而 mercurial 将在远程存储库上创建整个主/库设置,同时进行拉取。这就是 subrepos 的真正承诺——一个克隆就可以获得多个嵌套的 repos。
标签: mercurial