我有一个Git存储库,其中包含许多子目录.现在我发现其中一个子目录与另一个子目录无关,应该分离到一个单独的存储库.
如何在将文件的历史记录保存在子目录中的同时执行此操作?
我想我可以制作一个克隆并删除每个克隆的不需要的部分,但我想这会给我一个完整的树,当检查旧版本等.这可能是可以接受的,但我宁愿能够假装两个存储库没有共享历史记录.
为了说清楚,我有以下结构:
XYZ/
.git/
XY1/
ABC/
XY2/
Run Code Online (Sandbox Code Playgroud)
但我想这样做:
XYZ/
.git/
XY1/
XY2/
ABC/
.git/
ABC/
Run Code Online (Sandbox Code Playgroud) 我使用svn:externals从另一个SVN存储库中使用了两个SVN项目.
我怎样才能在Git中拥有相同的存储库布局结构?
使用Git 1.7.0中新的稀疏结账功能,是否可以像在SVN中一样获取子目录的内容?我找到了这个例子,但它保留了完整的目录结构.想象一下,我只想要'perl'目录的内容,而没有名为'perl'的实际目录.
- 编辑 -
例:
我的git存储库包含以下路径
repo/.git/
repo/perl/
repo/perl/script1.pl
repo/perl/script2.pl
repo/images/
repo/images/image1.jpg
repo/images/image2.jpg
repo/doc/
repo/doc/readme.txt
repo/doc/help.txt
Run Code Online (Sandbox Code Playgroud)
我想要的是能够从上面的存储库中生成这种布局:
repo/.git/
repo/script1.pl
repo/script2.pl
Run Code Online (Sandbox Code Playgroud)
然而,使用当前的稀疏结账功能,似乎只能获得
repo/.git/
repo/perl/script1.pl
repo/perl/script2.pl
Run Code Online (Sandbox Code Playgroud)
这不是我想要的.
我现在用git-svn的--ignore-paths选项挣扎了好几个小时,试图只从大型存储库中获取某些标签.
我想开始在dev的fetch,看起来像
> svn ls http://192.168.0.2/svn/repo/corporation/dev
branches/
tags/
trunk/
Run Code Online (Sandbox Code Playgroud)
完整标记集的存储库目录列表如下所示:
> svn ls http://192.168.0.2/svn/repo/corporation/dev/tags
Acme-4.x/
Acme-5.0/
Acme-5.1/
Acme-5.2/
Acme-5.3/
Acme-5.4/
Acme-5.5/
Acme-5.6/
Acme-5.7/
Acme-5.8/
Acme-5.9/
Run Code Online (Sandbox Code Playgroud)
我想在Acme-5.5之前忽略所有标签.
我尝试初始化和获取:
> git svn init http://192.168.0.2/svn/repo/corporation/dev
> git config svn.authorsfile ../users.txt
> git svn fetch --ignore-paths="Acme-4.x|Acme-5.0|Acme-5.1|Acme-5.2|Acme-5.3|Acme-5.4"
Run Code Online (Sandbox Code Playgroud)
不幸的是,我仍然看到Acme-4.x标签中出现了提取物.提取器通过告诉路径显示在控制台上
A ACME4.4/source/database/mssql/components/functions/vssver.scc
Run Code Online (Sandbox Code Playgroud)
我在正则表达式上尝试了很多变种,包括我想要忽略的标记的完整路径,在一两个小时后变成完全正则表达式的颠簸和绝望.我已经为git-svn-init提供了--ignore-paths选项,但都无济于事.
有人会非常友好地评论为什么正则表达式不会抑制在ignores-regex中指定的路径上的提取.
谢谢.