git子模块:定制

git子模块:定制,git,customization,dvcs,git-submodules,Git,Customization,Dvcs,Git Submodules,使用git子模块时,进行自定义的首选方式是什么?我应该 分叉项目并跟踪分叉 尝试覆盖默认行为 在本地进行更改 如果这些都没有意义,那又有什么意义呢?我不太确定您的问题是否暗示您要包含的所有项目都已经是git项目,或者它们当前是否是svn、mercurial、非版本控制的。如果是后者,则必须逐案回答 最有可能的是,您想要包含和定制的项目已经在github上了,然后您肯定应该通过github进行分叉,并将这些分叉用作子模块。任何定制都应该检入并推送到github 如果您希望包含的项目位于其他地方

使用git子模块时,进行自定义的首选方式是什么?我应该

  • 分叉项目并跟踪分叉
  • 尝试覆盖默认行为
  • 在本地进行更改

如果这些都没有意义,那又有什么意义呢?

我不太确定您的问题是否暗示您要包含的所有项目都已经是git项目,或者它们当前是否是svn、mercurial、非版本控制的。如果是后者,则必须逐案回答

最有可能的是,您想要包含和定制的项目已经在github上了,然后您肯定应该通过github进行分叉,并将这些分叉用作子模块。任何定制都应该检入并推送到github

如果您希望包含的项目位于其他地方(或基于svn、mercurial等),则可能会更加棘手。一种方法是在本地分叉项目,然后设置cron作业,将任何传入的更改推送到github。也就是说,创建github镜像。要完全控制合并和升级,您可能必须将这些镜像分叉,并将这些分叉作为子模块包含在项目中,签入本地定制并将它们推送到镜像分叉处

备选方案#3,fork项目和do local check-in only,可用于您没有上述选项且您所创建的内容实际上并不易于分发的情况


Monkey patching(您列表中的备选方案#2)应该是一个备选方案,您不希望项目依赖于您保持自定义fork与上游更改同步。

我发现使用git子模块的fork子项目非常烦人,这就是为什么我改写它的原因


git子树的思想是将子项目的内容导入到您自己的项目中,因此您可以一次对所有内容进行分支,并根据需要进行新的提交。然后,当您准备好(如果有)时,您可以使用
git subtree split
提取子项目的历史并将其提交到上游。

如果您能够澄清“覆盖默认行为”和“在本地进行更改”的含义,这将有所帮助。我不太清楚你的意思。