使用通用代码的Git项目

时间:2011-04-22 01:04:49

标签: git

我们有几个项目正在共享其大部分代码/配置文件。我们使用的框架具有某些目录和文件依赖性,这限制了我们可以分隔多少公共代码。例如,在'common','projectA'和'projectB'之间我们可能有:

/了projectA

  • / shared_dir1
    • 庸俗的
    • fileA1
    • fileA2
  • / common_dir2
    • common2
  • / DIR3
    • fileA3
  • common3
  • fileA4

/项目B

  • / shared_dir1
    • 庸俗的
    • fileB1
  • / common_dir2
    • common2
  • / DIR3
    • fileB2
    • fileB3
  • common3
  • fileB4
  • fileB5

我们目前使用3个Git项目来管理它:'common','projectA'和'projectB',公共文件被分成他们自己项目中的'common'和项目特定文件。 'projectA'和'projectB'有一个.gitignore,其中包含所有公共目录的条目以及每个共享目录下的所有公共文件。脚本将“common”复制到您要使用的项目中,并在那里进行开发。完成更改后,另一个脚本会将所有常用目录和公共文件复制回“common”。然后可以通过'git status'看到对'common'和项目的更改。

这显然带来了在'共同'之间来回复制,保持.gitignore准确以及在'projectA'和'projectB'内切换分支的麻烦。然而,正如我们计划'projectC-F'一样,这种方法似乎很好,因为我们可以避免将常见的更改合并到N个项目中。

寻求有关如何更好地维护此类结构的建议。由于缺乏隔离,子模块似乎是可以撤销的,除非我们做了很多。我已经看到了一些使用符号链接的有前途的替代方案,但这也伴随着它的问题。任何建议将不胜感激。

2 个答案:

答案 0 :(得分:2)

您是否考虑过git子树?

可以这样做:

git remote add common git://server/common.git
git fetch common
git checkout -b common_branch common/master
git checkout master
git read-tree --prefix=common/ -u common_branch

请阅读以下链接中的更多内容:

http://www.kernel.org/pub/software/scm/git/docs/howto/using-merge-subtree.html

http://progit.org/book/ch6-7.html

答案 1 :(得分:1)

如果您愿意将共享代码放在单独的git存储库中,您可能会对git submodules感兴趣。子模块允许您在另一个仓库中包含一个git仓库。

以下是几个链接: