如何在git中跟踪具有相同核心文件的单独项目

时间:2012-12-13 06:16:00

标签: git version-control development-environment git-submodules git-subtree

我使用git版本控制,我有多个使用相同基目录的项目,尽管某些更改是特定于项目的。

有没有办法我可以使用相同的git repo跟踪超级文件夹(在我的情况下为root / private / core)以及公共和私有项目特定目录。 另外,如果我在一个项目中对核心文件进行更改,我希望在其他项目git repo中进行更改。

我的方法是在根文件夹中创建一个git repo,然后为项目创建分支,而不是跟踪其他项目文件。但是使用这种方法我必须在其他项目中合并核心更改,并且还存在一种逻辑错误,因为在这种情况下,分支将用作项目。

我也研究过子模块,但这似乎并不是最好的解决方案。如果有一个解决方案需要我更改我的项目目录系统,我能够做到这一点,虽然我想分开保存公共,私人和核心导演。

目前我的目录的简化示例:

    • 私人
      • 项目
        • PROJECT1
        • 项目2
    • 公共
      • PROJECT1
      • project2

在私有项目文件夹中,存在特定于项目的核心php扩展,并且在公共项目文件夹中只有样式表,javascript和索引。

2 个答案:

答案 0 :(得分:1)

代替子模块(有自己的限制 - “你不能在主项目中修改子模块的内容” - 而将改变你常用的Git工作流程)你可以考虑{{ 3}},在这种情况下,核心将作为子树添加(但仍然作为单独的仓库存在)在所有超级项目中。 git-subtree处于让人联想到你的州的情况

答案 1 :(得分:0)

  

我也研究过子模块,但这似乎也不是最好的解决方案

然而,它可能是一个有效的解决方案:

  • private家长代表,包括coreproject1project2作为子模块
  • public父级回购,包括project1project2作为子模块

每次修改子模块(如project1中的private)时,您需要:

  • 提交,将其推送到上游仓库(父仓库private也一样),
  • 进入另一个父级仓库的相同子模块(public / project1
  • git pull

不是很简单,但是它允许您保持对每个父repo使用的配置的精确引用(“configuration”是您需要的子模块的SHA1的确切列表)