2

我对 Github 还很陌生,想要一些建议如何安排我的工作流程。

我们有一个使用 XAMPP 在 Mac Mini 上运行的小型 Web 应用程序。我们在全国有几台 Mac Mini,我一直在寻找一种管理和更新软件的好方法,因为我对所有不同的版本感到非常沮丧。

问题是该软件的某些文件是共享的,但某些文件是特定于每个客户端/Mac Mini 的。我正在寻找一种简单的设置,因此我只需更改一次公共文件,并且仍然为每个客户端保留特定文件(如模板)。目前的情况是这样的:

  • 我的 htdocs 目录中有 1 个软件文件夹
  • 该文件夹在根目录中既有特定文件又有公共文件,如下所示:

    • 共享文件夹
    • shared.html
    • 具体的.html
    • 特定文件夹
    • 媒体文件夹(我会忽略它,而不是放在 git 上)

我正在寻找最好的方法来管理这个。我对此主题进行了一些研究,但我希望有人可以针对这种特定情况为我提供建议。我觉得我有以下选择:

  1. 将所有内容放在 1 个存储库中,但将特定文件放在单独的分支中(我是否必须在更新后将公共文件的更改推送到每个客户端分支?)

  2. 使用 2 个 repo(并使用 .gitignore 将公共文件与特定文件分开)。1 个带有公共文件,1 个带有客户端特定文件(在单独的分支中)。我的早期研究告诉我,这是不可能的,因为一切都在我的根目录中,而不是特定目录

  3. 使用 git 子树

  4. 使用 git 子模块

  5. 使用 gitslave

  6. 还要别的吗?

理想我正在寻找可以使用 OSX Git GUI 管理的解决方案。

关于我的工作流程。我希望我可以直接从我在 htdocs 中的软件文件夹中对代码进行所有更改。如果我只对公共文件进行更改,我当然想将其提交给公共回购。如果我对特定文件进行更改,我想首先连接到正确的分支或 repo,然后更新它。对于不正确的术语,我深表歉意,但我希望它仍然足够清楚。

如果有人能指出我正确的方向,那就太好了。

4

1 回答 1

1

据我所知,唯一可以在 git 中工作的解决方案是选项 1(分支)。

如果要区别对待的文件都在一个文件夹中,则其他都将不起作用。

更新后是否必须将公共文件的更改推送到每个客户端分支?

是的你是。实际上,您需要首先将您的更改合并到客户端分支中(准确地说,合并到客户端分支的本地副本中),然后推出所有客户端分支。这应该可行,尽管它可能有点尴尬。您可以通过一些脚本自动化来缓解这种情况。


如果您可以将自定义文件放入子文件夹,那么可以,您可以使用 git-submodule、git-subtree 或类似的。但是,我认为这不适用于您的情况。git-submodule 等。适用于您希望将内容保存在不同存储库中的情况。这意味着这两个部分(存储库)可以独立克隆、独立版本控制、独立标记和分支等。

但是,据我了解,这不是您想要的。自定义模板都是软件产品的一部分,并且会随着系统的其余部分一起发展。因此,将它们放在单独的存储库中只会造成麻烦(例如,如果您进行分支,则需要单独分支每个子模块 - 更糟糕的是,单独合并每个子模块)。

您只想维护某些文件的不同“版本”,而这正是分支的用途。


但是,您应该考虑另一种方法,即在运行时执行特定于系统的定制

如何做到这一点取决于具体情况,但作为一个想法,您可以拥有一个系统特定事物表。然后您在启动时检测您的主机系统(获取主机名或类似名称),并应用自定义。

这避免了多个分支的所有问题,同步它们,测试它们并确保部署正确的分支。此外,也许更重要的是,您可以使用一个代码库,并且可以利用系统之间的相似性。最后,您可以在运行时打开和关闭自定义的各个部分,这大大简化了与自定义相关的调试问题。

根据我的经验,这是一种比部署文件更简单、更健壮的方法,甚至可能在不同系统上部署不同的代码。我自己在几个项目中使用了这个想法,并且效果很好。

于 2012-10-11T12:09:18.040 回答