我 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
.
MainProject
和Module
都是:
- 仍在开发中,可能会有修改
- 现代 CMake 项目
- Github
上的独立存储库
- 由我控制
问题:
几个月前,我尝试使用 CMake 和版本控制来管理这种依赖关系,但没有成功。迫于最后期限,我最终选择了 “最简单的解决方案” 到 copy-paste 项目 Module
headers in MainProject
。开发 MainProject
导致在 Module
本地副本 中添加功能和修改接口。现在有两个分歧 Module
.
它是如何工作的
如果 Module
非常稳定(copy/pasting headers 实际上是我选择稳定的依赖项的解决方案,但我没有'拥有所有权)。
我可以 modified/commited/pushed/recopy/repasted Module
存储库来存储我想带来的每个修改。但我当然没有,因为...时间和截止日期。
问题
现在我想退出这个解决方案(即,反映对初始Module
项目的修改)并选择更好的依赖管理策略。
我能想到的
- 在
Module
git 项目上创建一个新分支 update
,copy-paste 修改后的版本,提交并使用 git diff
检查差异分支 master
- 使用这三种方法中的一种或组合(但我不知道如何选择)
- git 子模块
- git 子树
- C++20 模块
你的 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 提交,标记命令生成的子模块提交并合并它,而不是仅仅将其提示内容添加为新提交。
上下文:
MainProject
依赖于 header-only 依赖项 Module
.
MainProject
和Module
都是:
- 仍在开发中,可能会有修改
- 现代 CMake 项目
- Github 上的独立存储库
- 由我控制
问题:
几个月前,我尝试使用 CMake 和版本控制来管理这种依赖关系,但没有成功。迫于最后期限,我最终选择了 “最简单的解决方案” 到 copy-paste 项目 Module
headers in MainProject
。开发 MainProject
导致在 Module
本地副本 中添加功能和修改接口。现在有两个分歧 Module
.
它是如何工作的
如果
Module
非常稳定(copy/pasting headers 实际上是我选择稳定的依赖项的解决方案,但我没有'拥有所有权)。我可以 modified/commited/pushed/recopy/repasted
Module
存储库来存储我想带来的每个修改。但我当然没有,因为...时间和截止日期。
问题
现在我想退出这个解决方案(即,反映对初始Module
项目的修改)并选择更好的依赖管理策略。
我能想到的
- 在
Module
git 项目上创建一个新分支update
,copy-paste 修改后的版本,提交并使用git diff
检查差异分支master
- 使用这三种方法中的一种或组合(但我不知道如何选择)
- git 子模块
- git 子树
- C++20 模块
你的 Module
项目字面上 是 一个 Git 子模块:一个独立更新的历史,你的 MainProject
构建使用特定的修订.
Developing
MainProject
led to add features and modify interfaces in theModule
local copy. Now there are two divergingModule
最快:通过对当前 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 提交,标记命令生成的子模块提交并合并它,而不是仅仅将其提示内容添加为新提交。