【问题标题】:How to exclude the unit test directory in GitGit如何排除单元测试目录
【发布时间】:2018-11-12 14:01:03
【问题描述】:

一个现有的大型 PHP 项目正在对其进行单元测试改进。我想在开发分支的代码中有一个“测试”目录,其中包含这些单元测试,也许还有 DB 固定装置。自然,我不希望那里有任何东西进入生产环境,所以我想要一种在部署时自动排除该目录的方法。或者理想情况下,一种避免将其中的任何内容首先合并到 master 中的方法。

我该如何管理?测试目录会有频繁且不可预测的提交,因此我不能简单地手动跳过某些提交。

编辑:我现在有四个关于 .gitignore 的答案。我不相信 .gitignore 在这里是合适的,因为我想排除一些要提交但只能来自特定分支的东西。

【问题讨论】:

  • 你有没有研究过从 git 提交中排除目录?我感觉你很快就能找到答案。
  • 为什么您不希望您的测试与被测代码一起进行?听起来您只需要更改部署过程即可。
  • @PatrickQ 是的。但我只知道如何使用 .gitignore 或稀疏结帐来做到这一点。据我所知,这两个都没有涵盖这个用例。
  • @Lee 我确实希望我的测试与代码一起进行。但我不希望它在主分支中。否则,是的,我可以更改我的部署过程,但我不知道如何从部署中明确排除单个目录。
  • 为什么不希望在 master 分支中进行测试?您从哪里分支以获得新功能?

标签: php git unit-testing


【解决方案1】:

它叫.gitignore

来自文档:

gitignore 文件指定了 Git 应该忽略的故意未跟踪的文件。已被 Git 跟踪的文件不受影响

来源:https://git-scm.com/docs/gitignore

举个例子,假设你有这个工作树:

|-app
|-test
|-index.php

要排除 test/ 测试目录,在与 .git 文件夹相同的级别上添加一个 .gitignore 并在其中添加:

test/

提交 git ignore 并进行更改/将文件添加到 test/,您会发现它在运行时不会出现

$ git status

【讨论】:

  • 我对 gitignore 的理解是它不适合,因为我确实想将这些文件推送到开发分支,而不是主分支。 .gitignore 不是每个分支的东西,据我所知。我错了吗?
  • 那么这是不可能的,这里描述了一个解决方法:stackoverflow.com/questions/29579546/…
  • 感谢您的回复。这是人们在生产环境中排除测试文件夹的正常方式吗?看起来很笨拙。
  • @JaneDoe 个人我永远不会在生产环境中进行测试
  • 我也不会!这正是我的问题 - 我怎样才能让我想成为其他分支的一部分的测试不被合并到生产分支中?
【解决方案2】:

您可以使用.gitignore。这是您项目根目录中的一个文件,您可以列出您不想提交/推送的所有文件和目录。它们由新行分隔。

【讨论】:

  • 请阅读我的问题。我希望将文件提交到存储库但从部署或合并中排除。这不是 gitignore 所做的。
【解决方案3】:

我发现让一个分支的一部分永久不被合并到另一个分支的方法是使用子模块。

我将单元测试文件夹创建为自己的存储库,然后将其作为子模块包含在我的主线分支(不是生产/主分支)中。

https://git-scm.com/book/en/v2/Git-Tools-Submodules

默认情况下,当您克隆存储库时,不会克隆子模块。子模块目录已创建但仍为空,除非您还执行

git submodule init
git submodule update

因此,它就像在生产环境 git clone 中不包含上述命令一样简单,但在克隆存储库以进行测试或开发时包含它们。您可以对测试目录以及代码库进行任何更改,并将两者一起提交。这意味着可以与代码库一起开发测试,而不会冒险将它们部署到生产环境中。

我发现以下别名有助于简化 git 操作:

$ git config alias.sdiff '!'"git diff && git submodule foreach 'git diff'"
$ git config alias.spush 'push --recurse-submodules=on-demand'
$ git config alias.supdate 'submodule update --remote --merge'

这似乎是解决希望单个存储库中的代码分离在每个分支上有所不同的问题的正确方法。

【讨论】:

    猜你喜欢
    • 2016-02-19
    • 1970-01-01
    • 1970-01-01
    • 2013-10-03
    • 2017-07-26
    • 1970-01-01
    • 2016-02-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多