如何将子文件夹转换为子库?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何将子文件夹转换为子库?相关的知识,希望对你有一定的参考价值。

我在我的仓库中有一个子文件夹,我想提取到subrepo。问题是您必须从原始仓库中删除该文件夹中的所有文件,这会在尝试更新到早期版本时产生问题。此外,如果你先输入一个subrepo,将它添加到.hgsub,然后只提交原始文件的删除,它也会从subrepo中删除它们(有点令人困惑)。

有没有更好的方法告诉M​​ercurial文件已经移动到subrepo,没有变化?

答案

保持理智的关键是Mercurial的convert功能。 http://mercurial.aragost.com/kick-start/en/subrepositories/总结了基本方法如下:

将文件夹转换为子库

一个项目可能包含一个带有一些代码的文件夹,这些代码在稍后实现时应该用于不同的项目。这个代码当然可以复制到一个存储库,项目可以作为子存储库包含在存储库中。然而,这意味着我们将失去这些文件的宝贵历史。

这样做的方法是将文件夹转换为存储库,使用convert扩展,然后将此存储库作为不同项目中的子存储库。

进一步的详细信息在引用页面以及https://www.mercurial-scm.org/wiki/ConvertExtension上给出

如果它是一个选项,那么您可以考虑使用convert两次,将原始repo拆分为两个 - 包括所选文件(包含其历史记录),另一个不包括它们。

Illustrative transcript (invoking convert just once)

/tmp$ mkdir repo
/tmp$ cd repo
/tmp/repo$ hg init
/tmp/repo$ echo a > a.txt
/tmp/repo$ mkdir folder
/tmp/repo$ echo b > folder/b.txt
/tmp/repo$ hg addremove
hg addremove
adding a.txt
adding folder/b.txt
/tmp/repo$ hg commit -m init
/tmp/repo$ (echo include folder; echo rename folder .) > map.txt
/tmp/repo$ hg convert --filemap map.txt . subrepo
initializing destination subrepo repository
scanning source...
sorting...
converting...
0 init
/tmp/repo$ cd subrepo
/tmp/repo/subrepo$ hg update
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
/tmp/repo/subrepo$ find .
.
./b.txt
./.hg
<etc>
/tmp/repo/subrepo$ cd ..
/tmp/repo$ hg rm folder/b.txt
/tmp/repo$ file folder
file folder
folder: cannot open `folder' (No such file or directory)
/tmp/repo$ ls
a.txt   map.txt subrepo
/tmp/repo$ mv subrepo folder
/tmp/repo$ echo folder = folder > .hgsub
/tmp/repo$ hg add .hgsub
/tmp/repo$ hg st -dram
hg st -dram
A .hgsub
R folder/b.txt
/tmp/repo$ hg commit -m 'subrepo created'
/tmp/repo$ hg files
hg files
.hgsub
.hgsubstate
a.txt
/tmp/repo$ cd folder
/tmp/repo/folder$ hg files
hg files
b.txt
/tmp/repo/folder$ echo c >> b.txt
echo c >> b.txt
/tmp/repo/folder$ cat b.txt
cat b.txt
b
c
/tmp/repo/folder$ hg commit -m "modified c"
hg commit -m "modified c"
/tmp/repo/folder$ cd ..
cd ..
/tmp/repo$ hg files --rev 0
hg files --rev 0
a.txt
folder/b.txt
/tmp/repo$ hg co --rev 0
hg co --rev 0
abort: path 'folder/b.txt' is inside nested repo 'folder'
/tmp/repo$ hg cat --rev 0 folder/b.txt
hg cat --rev 0 folder/b.txt
b
/tmp/repo$ hg -R folder cat --rev 0 folder/b.txt
hg -R folder cat --rev 0 folder/b.txt
b
/tmp/repo$ hg -R folder cat --rev 1 folder/b.txt
hg -R folder cat --rev 1 folder/b.txt
b
c
/tmp/repo$ 

以上是关于如何将子文件夹转换为子库?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不破坏SQL逻辑的情况下将JOINS转换为子查询

如何将子查询转换为连接以获得快速结果?

如何在 C# 中将列表或数组转换为子类型?

在创建VSCode片段时,如何将变量转换为title-case(如TitleCase)?

如何将子视图上的触摸事件的坐标转换为其父视图中的坐标?

如何将子进程脚本输出到 GUI?