如何让 git 忽略我服务器上的目录?

How to get git to ignore directory on my server?

假设我的回购看起来像这样:

myApp public index.html ... tests foo.js ...

我希望 tests 文件夹被推送到 GitHub 而不是我的服务器。我该如何实现?

因为我希望 tests/ 被推送到 GitHub,所以我不能简单地将 /tests/* 添加到我的 .gitignore 文件中。

我试过将 /tests/ 添加到我服务器上的 .git/info/exclude 文件,然后删除 /tests 的内容,但这没有用。

.gitignore.git/info/exclude 不忽略更改。他们只说要考虑未跟踪的内容。一旦文件被跟踪,它们就没有任何作用。

听起来您正在使用 Git 作为发布工具,并且 运行 成为众多问题之一。版本控制是一个糟糕的发布工具。我建议改为使用 release/packaging 系统。

在生产环境中使用 git 结帐会有好处。首先,如果有任何东西是热补丁的,那将是显而易见的。但是你需要一个发布过程。

  • 从你的开发分支创建一个发布分支。
  • 删除发布分支中的测试目录。
  • 检查生产服务器上的发布分支。

当您准备好发布时...

  • git checkout release
  • git merge --no-commit devel
  • 如果合并重新添加了测试目录,则丢弃它。
  • 提交合并。
  • ssh 到生产环境并拉取。

正如 Schwern 所说,如果您实际上仍想使用 git 发布,最好的选择是为发布创建另一个分支。步骤可以是:

在您的机器中:

A-->B-->C-->D          -development
    \       \
     `->v1---`->v2     -releases

创建发布分支

git branch releases
git checkout releases

然后您可以删除 releases 分支 中的 test 文件夹

git rm myApp/test
git commit

并与开发分支合并,不带文件夹:

git merge --no-commit development

然后你可以将整个项目推送到GitHub。然后在服务器中你可以这样做:

git pull origin releases

为了只获得 releases 分支 所以你将在你的服务器中有这个结构。

->v1----->v2      -releases