sou*_*ein 28 git git-submodules
我有这个git存储库,其中包含两个文件夹:binary-search和poker.例如,http://github.com/soulnafein/code-katas
我想将这些文件夹放入子模块并保留其更改历史记录.
我怎样才能做到这一点?
Von*_*onC 14
一般的想法是使用' git filter-branch'和以下步骤:
1)使用--subdirectory-filter filter-branch(在克隆你的repo之后)创建一个子模块.
$ git filter-branch --subdirectory-filter ABC HEAD -- --all
Run Code Online (Sandbox Code Playgroud)
有关此步骤的更多信息,请参阅此SO问题.
2)使用索引过滤器创建超级项目filter-branch以删除子模块.
$ git filter-branch --index-filter "git rm -r -f --cached --ignore-unmatch ABC" --prune-empty HEAD
Run Code Online (Sandbox Code Playgroud)
3)将子模块提交到最新版本的超级项目.
有关实际示例,请参阅将子目录分离到单独的git存储库中.
每个子模块都将保留其历史记录.
但正如这个补丁提案中所述,它会:
失去了超级项目和子模块之间的所有历史联系,破坏了像'
git bisect' 这样的工具,并且难以恢复旧版本.理想情况下,新创建的超级项目的每个版本都将链接到子模块的正确版本(并且在整个项目历史记录中也将正确设置所有.gitmodules条目)
如果您不需要将以前的历史记录链接到新子模块,则可以按照上述步骤操作.
但是如果你确实需要从旧点开始分支,同时引用你的子模块(目前是简单的子目录),你可以考虑尝试我引用的补丁中提到的脚本.正如Junio C Hamano所说,它已经在这个主题中讨论,但已集成到Git中:
不幸的是,我认为我们没有完全设计(根本没有实现)行为来检查在超级项目树中移动了相同子模块的不同历史点.
| 归档时间: |
|
| 查看次数: |
13885 次 |
| 最近记录: |