【问题标题】:How to separate local from shared code using git repos如何使用 git repos 将本地代码与共享代码分开
【发布时间】:2015-09-14 09:46:28
【问题描述】:

我正在为运行在不同服务器上的第三方应用程序开发和维护一堆 perl 胶水代码。目前,每台服务器都有一个 git 存储库,用于开发在其中运行的代码,以及一个推送部署机制,用于将更改推出到各自的生产服务器。

虽然通常在不同的服务器上运行不同的脚本,但我现在注意到一些 perl 脚本和模块在所有服务器上都是有用和必要的。我想把它们拉出来,这样我就有了一个可以维护它们的地方,同时仍然结合每个服务器本地的代码来测试和部署它们。本地脚本和模块使用共享模块,共享脚本使用共享模块,反之则没有依赖关系。

当前存储库结构:

服务器 1 ~/usr/dev:

localscript1.pl
sharedscript1.pl
perl-modules/localmodule1.pm
perl-modules/sharedmodule1.pm

服务器 2:

localscript2.pl
sharedscript1.pl
perl-modules/localmodule2.pm
perl-modules/sharedmodule1.pm

我想将 sharedscript1.pl 和 sharedmodule1.pm 提取到他们自己的 repo 中以进行源代码控制,但希望所有脚本在测试和生产环境中都位于相同的文件夹结构中。

我目前实现这一点的想法包括为共享代码创建一个 repo,并将其设置为本地 repos 的远程 repo。

共享仓库:

sharedscript1.pl
perl-modules/sharedmodule1.pm

然后我可以将共享存储库定义为本地存储库的远程,并将提交从那里拉到本地代码中。在那里测试并提交后,我可以使用我现有的部署流程将所有内容推送到生产环境。

这是一个合理的设置吗?我应该注意这种方法的任何问题/陷阱?有没有更好的方法来处理这种情况?

注意:我想保持这个相当轻量级,最终构建将是三到四个本地服务器,每个可能有十几个脚本和几个本地模块。共享存储库目前将有两个脚本和一个模块,可能还会有更多。

补充说明:我正在运行 git 版本 1.6.0.2

【问题讨论】:

    标签: git perl


    【解决方案1】:

    将所有文件放在同一个文件夹中可能会导致您自己或其他人在尝试确定每个文件的来源以及应如何维护时遇到困难。

    如果您的依赖项没有以某种方式反映在您的文件结构中,那么当您或其他人开始添加本地化代码并提交到您的“核心”存储库时,请不要感到惊讶。

    但是,通过使用指向本地化目录的软链接,您仍然可以有效地将所有文件放在同一位置。

    例如,以下软链接结构将为您提供平面文件结构以供使用,但为您提供分层文件结构用于依赖关系和模块化维护。

     basedir/perl-modules/localmodule1.pm -> ../../localized-code/server1/perlmodules/localmodule1
     basedir/localscript1.pl -> ../localized-code/server1/scripts/localscript1.pl
    

    使用简单的安装脚本,当您在需要server1 代码的服务器上安装时,您可以生成指向相关server1 文件夹或子文件夹的所有软链接。

    要维护版本控制,您可以gitignore 基本目录中除核心模块之外的所有文件,并使用 git submodules 维护每个本地化目录的代码。

    这样,您不需要将所有子模块都包含在所有服务器中。

    作为一个更普遍的潜在陷阱,请注意复杂的安装或升级过程。最终,您将在多台服务器上安装系统。作为您自己的潜在指南,请记住,根据 JOEL 测试,如果您无法一步构建,那么您的安装过程很容易出错。测试您的安装过程,您会发现自己的潜在问题。如果您可以为所有服务器运行全新安装,并且仍然可以进行维护,那么您应该没问题!

    【讨论】:

      猜你喜欢
      • 2011-03-16
      • 2014-12-01
      • 1970-01-01
      • 2018-06-15
      • 1970-01-01
      • 2022-01-06
      • 2019-04-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多