我需要将一些以前不受版本控制的代码包含到已经包含一些提交的 git 存储库中。
我想要自动化的是找到合适的“父”提交,新代码将成为子提交。
经过一些测试,我认为git diff-tree
效果最好(因为只有一个文件夹包含用于测试“亲子关系”的相关代码)。
我的方法是这样的:
- 循环遍历所有现有提交和提交的节点 sha1 和相关子树的 sha1
- 将新文件复制到存储库,将它们添加到索引
- 注意索引中相关子树的 sha1
- 将现有的相关子树与新的候选者进行比较,并使用 git diff-tree of something similar 来计算“相似度”
- 选择最相似的现有子树并使其成为新提交的父级,即检查新父级(或者
checkout --orphan
如果找不到合适的父级),清空工作目录并填充新文件并提交。
缺少的是一种计算相似度的方法!也许有人可以给我一个提示,哪种标志组合会有所帮助......
如果这很重要,代码看起来几乎像 PASCAL。