存储在git中的两个项目之间共享的本地文件

时间:2015-06-12 14:49:40

标签: git share

我正在开发两个不同的网站,每个网站都有自己的git存储库。我有一些通用代码(PHP和JavaScript),这两个站点都是通用的,我在开发机器上的一个单独的libs文件夹中使用符号链接,以便两个本地网站都相信这个{{1文件夹位于网站的根目录。

我也想用git管理libs文件夹。我可以想象两种不同的方法:

  • libs文件夹的两个远程副本,每个站点仓库中有一个
  • 第三个git存储库,只是为了管理libs文件夹,为两个远程站点repos提供了解这个libs repo是否存在的方法,以便一起跟踪所有这些。< / LI>

我很感激帮助决定这两个选项中的哪一个更可靠(或者是否有更好的选择)。我也很感激帮助理解如何设置所选择的选项。

1 个答案:

答案 0 :(得分:1)

这是git submodules的内容(另见Pro Git)。

libs是一个单独的代码实体。它在两个(可能更多)项目之间共享,并且可以单独进行版本控制。子模块的完美候选者。

在项目A中做:

  1. 删除符号链接并仅在项目A中保留文件。(Git可能无法捕获项目B中的更改。)
  2. Detach (move) subdirectory into separate Git repository
  3. 将新子模块推送到自己的遥控器。您可以使用任何Git托管(Bitbucket适用于免费关闭的repos)或本地文件夹(安全,但易受移动和重命名)。
  4. 在项目B中做:

    1. 承诺丢失数据。 git add -ugit commit -m'detached libs'
    2. 从远程添加该子模块:git submodule add <repo-url> [<local path>]
    3. 现在你可以检查它是如何工作的,从两个回购推进和拉动。

      额外问题:

      为什么不从A?中的子模块中克隆B中的子模块 这使得结构更加独立和灵活。如果你有N个项目怎么办?如果你想删除A怎么办?如果要在文件系统中移动A,该怎么办?该计划将破裂。

      为什么不用git-subtree启动两个子模块?
      Commit的sha1还取决于创建时间。因此,两个子模块将具有完全相同的内容(并且对于blob和树匹配sha1-s),但历史完全不同。你必须合并它们,这是额外的工作。