Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git 什么';在版本控制下处理系统特定信息的最佳实践是什么?_Git_Version Control_Configuration Files - Fatal编程技术网

Git 什么';在版本控制下处理系统特定信息的最佳实践是什么?

Git 什么';在版本控制下处理系统特定信息的最佳实践是什么?,git,version-control,configuration-files,Git,Version Control,Configuration Files,我是版本控制新手,如果有一个众所周知的解决方案,我很抱歉。特别是对于这个问题,我使用的是git,但我很好奇如何在所有版本控制系统中处理这个问题 我正在开发服务器上开发一个web应用程序。我在两个地方定义了web应用程序的绝对路径名(而不是文档根)。在生产服务器上,此路径不同。我对如何处理这件事感到困惑 我可以: 重新配置开发服务器,使其与生产服务器共享相同的路径 每次更新产品时编辑两个引用 我不喜欢#1,因为我宁愿保持应用程序的灵活性,以应对将来的任何更改。我不喜欢#2,因为如果我开始在第二台开

我是版本控制新手,如果有一个众所周知的解决方案,我很抱歉。特别是对于这个问题,我使用的是git,但我很好奇如何在所有版本控制系统中处理这个问题

我正在开发服务器上开发一个web应用程序。我在两个地方定义了web应用程序的绝对路径名(而不是文档根)。在生产服务器上,此路径不同。我对如何处理这件事感到困惑

我可以:

  • 重新配置开发服务器,使其与生产服务器共享相同的路径
  • 每次更新产品时编辑两个引用
  • 我不喜欢#1,因为我宁愿保持应用程序的灵活性,以应对将来的任何更改。我不喜欢#2,因为如果我开始在第二台开发服务器上使用第三条路径进行开发,那么每次提交和更新都必须更改它

    处理这个问题的最佳方法是什么?我想到:

  • 使用自定义关键字和变量展开(例如在版本控制属性中设置属性$PATH$,并在所有文件中展开)。Git不支持这一点,因为这将对性能造成巨大影响

  • 使用更新后和提交前挂钩。可能是git的可能解决方案,但每次我查看状态时,它都会报告这两个文件正在更改。不是很干净

  • 从版本控制之外的配置文件中提取路径。然后,我必须将配置文件放在所有服务器上的相同位置。不妨从同一条路开始


  • 有没有一个简单的方法来处理这个问题?我是否考虑过了?

    我喜欢RubyonRails处理此类问题的方式—特定于环境的配置文件。Rails支持开发、测试和生产数据库连接—由database.yml文件中的配置控制。这里是一篇关于创建其他特定于环境的配置选项的博客文章,它是针对Rails的,但可能会给您一些关于如何为您的环境执行类似操作的想法

    听起来您的生产代码是一个完整的git存储库,要更新生产代码,您需要执行一个git pull?您可能希望尝试一个单独的构建过程,从存储库中检出代码并创建一个干净的构建(no.git文件夹)。您可以拥有特定于环境的配置文件,其中包含随文件一起复制或创建的路径。

    永远不要硬编码配置数据,如文件系统路径,并强制多个部署匹配。这是黑暗的一面,那里有很多痛苦

    我发现构建支持多种配置的系统很有用,也很容易,而且我经常将配置文件并排提交到源代码管理中,但产品的配置是模糊的(没有真正的密码),开发的配置是模板化的(因此签出不能覆盖开发人员的配置)。代码总是以与配置无关的方式进行打包——相同的二进制文件可以部署到任何地方

    不幸的是,大多数语言/开发平台并不支持这一点(与RubyonRails不同)。因此,你必须在不同程度上自己建造它

    通常,基本原则是将间接寻址合并到配置中:不指定配置,而是指定如何在代码中找到配置。通常会调用几个间接指令:特定于用户、特定于应用程序、特定于机器、特定于环境。每一个都应该在一个定义明确的位置/方式中找到,并且它们之间应该有一个定义明确的优先级(通常是用户优先于机器而不是应用程序优先于环境)。您通常会发现,每个可配置设置在一个位置都有一个自然的主页,但不要将该依赖项硬编码到您的应用程序中

    我发现,设计能够报告其配置并进行验证的应用程序是非常有价值的。在大多数情况下,缺少或无效的配置项会导致应用程序中止。尽可能在启动=快速失败时执行验证(和中止)。硬代码只有在可以可靠使用时才默认

    抽象配置访问,以便大多数应用程序不知道它来自何处或如何处理。我更喜欢创建
    Config
    类,这些类将可配置设置公开为单个属性(相关时为强类型),然后通过IOC将它们“注入”到应用程序类中。不要让所有应用程序类直接调用所选平台的原始配置框架;他是你的朋友

    在大多数企业级(财富500强)组织中,除了该环境的管理团队之外,没有人看到生产(甚至测试)环境配置。配置文件从不在发布中部署,它们由管理团队手工编辑。相关的配置文件肯定永远不会与代码一起签入源代码管理。管理团队可以使用源代码管理,但它是他们自己的私有存储库。萨班斯-奥克斯利法案和类似的法规也倾向于严格禁止开发人员对(近)生产系统或任何敏感配置数据进行一般访问。在设计方法时要留心


    享受。

    尽可能避免绝对路径

    不要依赖当前的版本控制来做一些神奇的事情-将来可能会更改版本控制系统

    对我来说,最简单的方法是:拥有一个'config.live',并且'config'是为开发而配置的。在部署过程中,只需将config.live移动到config即可。对于更复杂的配置,可能需要每个配置的子目录

    一组部署过程是必不可少的,因为配置