我 copy/pasted/modified 我项目中的依赖项。这不是一个聪明的依赖管理策略。我该如何退后一步?

I copy/pasted/modified a dependency in my project. This was not a smart dependency management strategy. How do I step back?

上下文:

MainProject 依赖于 header-only 依赖项 Module.

MainProjectModule都是:

问题:

几个月前,我尝试使用 CMake 和版本控制来管理这种依赖关系,但没有成功。迫于最后期限,我最终选择了 “最简单的解决方案” 到 copy-paste 项目 Module headers in MainProject。开发 MainProject 导致在 Module 本地副本 中添加功能和修改接口。现在有两个分歧 Module.

它是如何工作的

问题

现在我想退出这个解决方案(,反映对初始Module项目的修改)并选择更好的依赖管理策略。

我能想到的

你的 Module 项目字面上 一个 Git 子模块:一个独立更新的历史,你的 MainProject 构建使用特定的修订.

Developing MainProject led to add features and modify interfaces in the Module local copy. Now there are two diverging Module

最快:通过对当前 MainProject 修订版的彻底检查,

git tag slice $(git commit-tree -m slice @:path/to/Module)
git rm -rf path/to/Module
git submodule add u://r/l path/to/Module
git push path/to/Module slice
cd path/to/Module
git read-tree -um slice
git commit -m 'Module content from MainProject'

现在您的内容和祖先看起来很有用,您可以添加标签并将其推送到任何需要的地方,例如git checkout -b MainProjectModule; git push -u origin MainProjectModule

如果您的主项目中有很长的 Module 更改历史记录,并且您希望将其保留在 Module 历史记录中,这是可行的,甚至相当有效,但是您您将需要调整 some history surgery 来实现它,而不是标记 nonce 提交,标记命令生成的子模块提交并合并它,而不是仅仅将其提示内容添加为新提交。