在另一个项目中使用Git回购中的项目

在另一个项目中使用Git回购中的项目,git,version-control,Git,Version Control,我有一个框架,我正在建设,使一些常见的功能(数据库连接)更容易,并希望在另一个项目中使用它。我总是可以复制和粘贴它,但我正在努力,并不断扩展它。每当我在Git repo中进行提交时,让它复制更新后的自我会容易得多 我是否可以使用Git在我的其他项目中自动更新框架,或者我必须找到另一个解决方案?Git子模块 在不同的地方进行更新会有一些问题,但应该解决。使用git子树或git子模块 上次我检查时,子模块有一些主要问题(但我听说它们在最近的版本中有一些改进)。详情请参见此处: 简言之: 子树是常规的

我有一个框架,我正在建设,使一些常见的功能(数据库连接)更容易,并希望在另一个项目中使用它。我总是可以复制和粘贴它,但我正在努力,并不断扩展它。每当我在Git repo中进行提交时,让它复制更新后的自我会容易得多

我是否可以使用Git在我的其他项目中自动更新框架,或者我必须找到另一个解决方案?

Git子模块


在不同的地方进行更新会有一些问题,但应该解决。

使用git子树或git子模块

上次我检查时,子模块有一些主要问题(但我听说它们在最近的版本中有一些改进)。详情请参见此处:

简言之:

子树是常规的Git分支,通过特殊的合并策略进行合并,将其所有文件放入主机存储库工作副本的子目录中。除了合并策略(只有在创建合并提交时才起作用)之外,Git“子树”是一个完全正常的Git分支

优点:

  • 不需要额外的工具支持,除非需要从子树中引入新的更改,即使如此,所有支持都是
    -s子树
    命令行选项(有关完整的工作流,请参阅)。只有在进行子树拉取时,才需要记住有关子树的信息
缺点:

  • 所有子树提交都在宿主项目的历史记录中可见
  • 不要将更改提交到子树所在的主机存储库目录,或在下一次子树拉取时面临冲突
子模块是主机存储库中的Git存储库

优点:

  • 更清晰的历史记录,更好地与主机存储库分离
  • 可以直接从子模块存储库向上游提交子模块(或者我认为是这样)
缺点:

  • 对于每个(或许多)Git命令,您都记得您正在处理带有子模块的存储库,以及许多令人讨厌的角落案例(或者当我查看时就是这样)。使用存储库的每个克隆所需的特殊工具支持

免责声明:我对子模块有偏见。自己试试看,什么方法更适合您的工作流程。

子模块看起来正是我需要的。有没有人知道Mac(think Tower,Cornestone[尽管这是SVN的])的可视Git客户端可以与子模块一起工作?在提交子模块之前,先进行实验,确保子模块真正适合您的工作流。我浪费了很多时间(见我链接的问题)才意识到我根本不能使用它们。下面是一个使用子模块的好例子。我环顾四周的子树,但我不确定区别是什么。。。我可能是唯一一个维护这两个项目(框架和项目)的人,但我只是想把这两个项目分开,这样我就可以选择在以后的其他项目中使用框架,而不必复制粘贴。子树什么时候工作得更好?Git客户端(Mac版)对子树或子模块的支持是什么(如果有的话)?我可以一直使用命令行,但我更喜欢在GUI中完成所有工作…@Caesar:嗯,我链接到一篇文章,其中列出了我的工作流不接受(或不接受)子模块的原因。如果你觉得它们对你来说很好-没问题。我对子树很满意。对我来说,它不起作用,所以在采用这种或那种方法之前,要小心并先进行实验。