作为开发人员,您是否使用 .gitignore 忽略所有内容并有目的地包含?或者你只是排除它?

As a dev, do you use .gitignore to ignore everything and purposefully include? Or do you just exclude with it?

我们在这里进行了一次内部讨论,我们对使用 .git忽略包含大量文件(如 CMS)的项目的最佳做法有些分歧。

方法一

方法 1 是有目的地 .git忽略您的构建标准附带的所有文件。这通常会像这样开始:

# ignore everything in the root except the "wp-content" directory.
!wp-content/

# ignore everything in the "wp-content" directory, except:
# "mu-plugins", "plugins", "themes" directory
wp-content/*
!wp-content/mu-plugins/
!wp-content/plugins/
!wp-content/themes/

# ignore these plugins
wp-content/plugins/hello.php

# ignore specific themes
wp-content/themes/twenty*/

# ignore node dependency directories
node_modules/

# ignore log files and databases
*.log
*.sql
*.sqlite

一些工作人员喜欢这种方法,因为如果您在标准文件之外创建一些东西,例如 /build 文件夹,那么它会被自动检测到并包含在内。但是,编写自定义主题和插件需要您向该文件添加几层以 "step in" 到您要保留的文件夹,而且通常,该文件读起来有点乱。

方法二

方法 2 忽略所有内容,然后将您想要的内容列入回购协议的白名单。那看起来像

# Ignore everything, but all to descend into subdirectories
*
!*/

# root files
!/.gitignore
!/.htaccess.live
!/favicon.ico
!/robots.txt

# theme
!/wp-content/themes/mytheme/**
/wp-content/themes/mytheme/style.css # Ignore Compiled CSS
/wp-content/themes/mytheme/js # Ignore Compiled JS

# plugins
!/wp-content/plugins/my-plugin/**

# deployment resources
!/build/**

一些员工喜欢这样,因为它更干净,你必须有目的地添加一些东西(这使得意外添加更难),而且它实际上也向你展示了你的 .git 文件夹结构。

最佳做法是什么?您喜欢哪种方法?您会推荐其中一种方法吗?

第二种方法是最佳实践,当涉及排除 gitignore 规则的某些文件夹内容时。

更能体现以下规律:

It is not possible to re-include a file if a parent directory of that file is excluded.

要从忽略的文件夹 f 的子文件夹中排除文件(或所有文件),您可以这样做:

f/**
!f/**/
!f/a/sub/folder/someFile.txt

含义:您需要先将文件夹列入白名单,然后才能从 gitignore 文件中排除。

更清晰,更短(除非你有大量文件夹要列入白名单)

What if it is a Joomla install with a large amount of directories and files?
Or what if a core upgrade adds new files or folders

别忘了你可以有多个 gitignore 文件,每个文件夹一个。
这意味着您可以混合搭配这两种方法。

你有:

理想的。git忽略文件,是不存在的文件。

出于某种原因,您将要通过源代码管理跟踪的文件与不想跟踪的文件深度混合在一起。

我想这就是你悲伤的根源。

您将 git 的预期目的(对程序员编辑的文件进行版本控制)与部署(旨在将文件放在正确的目录中)混为一谈。

您的问题不清楚,关于您是否认为 Wordpress 核心文件应该进行版本控制。我假设不是,因为这就是您设置 .gitignore.

的方式

您的问题也不清楚,关于您是在部署网站,还是将插件作为产品提供。这些都是不同的用例,它们需要不同类型的版本控制。如果这是一个已部署的网站,您应该对 Wordpress 和其他所有内容进行版本控制。如果您要发布插件或主题,那么您应该有一个包含大量不同 Wordpress 版本的测试套件来进行测试。

我认为您的源代码控制系统应该设置为仅跟踪进入您的发行版的插件/* and/or 主题/* 文件。压缩该文件夹应该会为您提供客户下载的插件资产。

要调试您的插件,您的 IDE 中应该有一个部署步骤,将每个被跟踪的文件复制到您选择的位置的 Wordpress 安装中。这使您可以更轻松地针对不同的 Wordpress 版本进行测试。

您正在减少工作流程问题,尝试选择 .git忽略。通过正确的工作流程从根本上解决问题。