2011-03-17 128 views
2

我有两个git项目回购有两个或三个共同的文件。git post-commit钩子

事情是这样的:

Project A ------> helper_functions

Project B ------> helper_functions

我在想,如果有一个接受的方法来“共享”回购之间的这些常见的辅助文件,让我没有在两个回购中维护单独的副本。

会像一个post commit钩子,当项目A的helper_functions被更新时更新项目B中的helper_functions?或者是否有一种更加无缝的方法来确保两个项目都有最新版本的helper_functions文件,并且该文件会自动包含在项目的任何包中?

感谢您接受任何想法或资源处理此问题。

另外,我想补充一点,这两个项目都有合作者,所以它最好是自动的,所以我们都在同一页面上,而不必使用软链接或别名。

回答

4

有些人可能会说这只是少数文件的矫枉过正,但对我来说,这听起来像是使用git支持子模块的好例子。基本上,你会创建一个名为helper_functions新的存储库,并添加到每个现有资源库与一个子模块:

git submodule add git://foo/bar/helper_functions.git helper_functions 

有一些细微之处做然而有子模块的工作,所以这将是值得先做一些阅读。我喜欢description in the git manual作为出发点,但还有很多其他很好的解释,例如那从Pro Git

但我不会创建钩子来提交和推送子模块,但是 - 我认为最好仔细考虑何时更新主存储库中提交的子模块的版本。但是,我发现非常有用的是使用commit-submodule脚本,该脚本确保在提交存储库中的新子模块版本之前推送子模块更改。

+0

感谢您的快速和彻底的答案马克,我从来没有遇到过这个功能的混帐。 – julio 2011-03-17 21:51:57

+0

小心一点。你很快就会发现自己正在利用我的答案。 – 2011-03-17 21:59:31

0

我会使用一个子模块,但会推荐使用“git slave”来处理共享存储库的任何更新。

另一种方法是使用子树。