2013-12-13 34 views
3

我有文件/目录结构:水银与subrepositories犯子

main/.hg 
main/subrepo/.hg 
main/subrepo1/.hg 

我有这样的内容.hgignore文件

.hg 

最后,我想在提交“主”其中包括所有文件,包括main/subrepo和main/subrepo1中的所有文件,不包括main/subrepo/.hg和main/subrepo1/.hg文件夹(因此主文件夹中的所有文件,不包括其中的.hg文件夹将被提交)。但是Mercurial跳过了main/subrepo/*和main/subrepo1/*。它不包括这个子文件夹/ subrepos完全提交。我怎样才能解决这个问题?

+0

你是否正确地链接到主存储库的子存储库,还是你有嵌套的存储库?换句话说,主文件夹中是否有一个.hgsub文件? –

+0

main,main/subrepo,main/subrepo1应该是独立的版本库,例如main和main/subrepo应该独立跟踪main/subrepo/test.txt文件的变化,main和main/subrepo1应该跟踪文件main/subrepo1/test的变化.txt独立,等 – freento

+2

子库是独立的,是的。但是,子库的目的是取出独立的存储库并在另一个存储库中重用它。父存储库可以选择在子库的远程/中央位置完成更改,或将其保留在特定版本(防止被迫导入重大更改)。实质上,子库是将第三方库保存在项目中的替代策略,而不必保留对子库或库的编译版本的外部引用(例如)。 –

回答

3

我猜测你只是简单地创建了一些嵌套的存储库,但没有将它们正确地链接为子库。

确保main存储库的根目录有一个名为.hgsub的文件。您创建的文件,添加以下内容,然后添加+提交文件到主存储库:

subrepo = https://path-to-subrepo/ 
subrepo1 = https://path-to-subrepo1 

如果subrepos不指向一些远程服务器,你可以使用过程中的本地路径。

+0

一些subrepos指向远程服务器,有些则不是。我的目标是使用主存储库作为其中所有文件/文件夹的备份(不包括.hg文件夹,因为不需要对其进行备份)。每天一次我想做hg commit; hg push;由cron。我不想使用任何备份软件,因为hg拥有我需要的一切。我所做的解决方案是将所有.hg文件重命名为.hg_gg文件,将.hg_gg添加到.hgignore,并在提交后将所有文件重命名。但我希望找到没有文件夹重命名的方式。 – freento

+2

听起来像是子存储库所用的轻微误用(滥用?)。 .hg文件对于保存子库的历史记录是必要的,以防您决定为其更改变更。它们的设计目的是允许一个存储库与其他存储库共享,以便克隆父存储库确保子存储库也被克隆,并且在父级存储库期望这些子存储库位于该级别。 –