【问题标题】:One working tree, jointly managed by multiple repositories?一棵工作树,由多个存储库共同管理?
【发布时间】:2014-12-12 00:02:10
【问题描述】:

我想知道是否有办法在多个(至少 3 个)Git 存储库之间联合对目录树进行版本控制。

这是我的目录树的简化版本。在现实生活中,它是DrupalJoomla 网站的网络服务目录。

root/
    index.php   # code, managed by application repository
    configuration.php  # secrets, e.g. database password
    uploads/    # contains user-supplied data
    temp/       # directory of temporary files, not archived
    attack.php  # attack code or data, unwanted, should be detected

index.php 代表我的 Web 应用程序的代码。只有开发人员才能为它做出贡献。我们希望它受版本控制。我们希望依靠 Git 部署到登台和生产服务器。

configuration.php 表示已部署的 Web 应用程序的配置。它包含应用程序的暂存版本和测试版本之间不同的值,例如应用程序应使用的数据库的名称。它还包含秘密值,例如数据库的密码。我不希望应用程序存储库中的这些秘密。相反,应用程序存储库具有此文件的占位符副本,具有无害的值。我想我想要一个托管在服务器上但分布有限的第二个存储库来管理这个文件。

uploads/ 代表文件和目录树,包含用户提供的数据:他们的博客文章、他们的图像、他们的共享文件。这些文件应该添加到应用程序存储库中。但是,我可能希望有一个单独的用户提供的数据存储库来跟踪这些。我可以备份它们,我可以使用存储库将它们移动到不同的服务器。我想注意攻击者是否添加了文件,例如带有意外的文件扩展名,到此目录。

tmp/ 表示应用程序在处理用户活动时生成的临时文件目录。它可能是一个缓存。我不希望这些文件在任何版本控制中。但是,我确实想注意攻击者是否添加了文件,例如带有意外的文件扩展名,到此目录。

attack.php 代表恶意攻击者添加的新文件和对应用程序文件的更改。我希望能够检测到这些已经出现。 git status 非常适合这个,如果存储库有正确的内容。

我很容易了解如何使用单个应用程序存储库管理此目录树。在其他地方使用 git dir 设置此目录树。我可以撒上'.gitignore',比如说,忽略uploads/tmp/ 的内容。我可以让应用程序库忽略configuration.php

我看不到如何设置第二个存储库来管理 configuration.php,并覆盖应用存储库副本中的无害值。我不知道如何设置.gitignores,它将告诉应用程序存储库观看index.php 并忽略uploads/,同时告诉用户数据存储库执行相反的操作。

潜在的障碍似乎是 Git 假设工作树只属于一个存储库,我试图让多个存储库共享它。那么,有没有一种方法可以用 Git 来分享呢?

问题Multiple repositories in one directory 类似。我认为有人声称这可以通过Subversion 完成。我没有看到任何答案说它可以用 Git 完成。特别是指出您可以为许多 Git 命令指定 --git-dir--working-tree 参数的答案,并没有谈论如何处理不同的 .gitignore 需求。

问题 Is it possible to manage multiple repositories coherently? 的答案提到了Repo,而后者又提到了Gerrit。这很有趣,但是有没有人用它们来建立我所追求的结构?

在工作树中散布.gitignore 文件的替代方法是列出每个存储库的$GIT-DIR/info/exclude 文件中的路径。这让每个存储库忽略它想要忽略的内容。但我担心这些exclude 文件的内容本身不会受版本控制,并且可能不会传递给在自己的存储库中开发应用程序的开发人员。

你推荐什么方法?

【问题讨论】:

    标签: git version-control web-deployment


    【解决方案1】:

    在一个主 repo 中聚合多个 repo 是最好的工作:

    对于包含机密或环境特定数据的文件,您应该使用内容过滤驱动程序(请参阅this answer),它会在结帐时自动生成具有适当内容的文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-03-13
      • 1970-01-01
      • 2011-06-13
      • 2012-10-24
      • 2023-03-29
      • 1970-01-01
      • 2012-12-31
      相关资源
      最近更新 更多