0

我有一个目录,有许多子目录,深度可变,总是在增长。我只想保留一个特定的文件。我如何告诉.gitignore忽略这些目录和子目录中的所有文件,除了那个?

确切地说,我拥有的是一个报告目录,我每天在其中存储许多报告。每个新报告都会创建一个新的子目录,其中包含一个变量名、文件和子目录。我只想保留文件'foo'

  • 报告目录
    • MONTH_A
      • DAY_HOUR_OF_REPORT
        • 文件_1
        • 文件_2
        • 文件_N
        • ANOTHER_DIRECTORY_I_COMPLETELY_IGNORE
      • DAY_HOUR_OF_REPORT
        • 文件_1
        • 文件_2
        • 文件_N
        • ANOTHER_DIRECTORY_I_COMPLETELY_IGNORE
    • MONTH_B
      • DAY_HOUR_OF_REPORT

等等

我已经尝试了很多东西。最后一个在哪里

/REPORTDIRECTORY/**/*
!foo

/REPORTDIRECTORY/**/*
!/REPORTDIRECTORY/**/foo

没有成功。

我开始相信我在使用双通配符时遇到了麻烦,因为如果我输入 gitignore:

/REPORTDIRECTORY/**/ANOTHER_DIRECTORY_I_COMPLETELY_IGNORE/

或者

REPORTDIRECTORY/**/ANOTHER_DIRECTORY_I_COMPLETELY_IGNORE

这个 'ANOTHER_DIRECTORY_I_COMPLETELY_IGNORE' 不会被忽略:(

我正在使用1.8.1.2-preview20130201适用于 Windows 的 Git 版本。我将SmartGitWindows 用作 GUI(4.5 版),但我认为 GUI 不应该像.gitignoreGit 直接解析的那样重要。Git 手册页状态双星号通配符应该可以工作。

我做错了什么还是.gitignore解析器?

4

2 回答 2

0

您是否有可能需要更新到最新版本?根据该网站**/仅从 1.8.2 开始支持模式。

于 2013-08-29T22:11:39.307 回答
0

忽略版本化文件

存储库中的某些文件是版本化的(它们不能被 git 忽略),经常更改,但很少提交。通常这些是被编辑的各种本地配置文件,但不应该提交到上游。

Git 允许您通过假设它们未更改来忽略这些文件。这是通过运行 git update-index --assume-unchanged path/to/file.txt 命令来完成的。一旦将文件标记为这样,git 将完全忽略该文件上的任何更改;它们不会在运行 git status 或 git diff 时出现,也不会被提交。

要让 git 再次跟踪文件,只需运行 git update-index --no-assume-unchanged path/to/file.txt。

这是直接来自github的网站

然后,您可以偶尔根据需要提交一个文件。并且仍然通常忽略这些变化。

通过在.gitignore您尝试部分忽略的文件夹中添加一个文件,这似乎是一个合理的解决方案。

文件夹中文件的内容.gitignoe可能只包含一个条目:

*/

如果要忽略所有文件夹。

于 2013-08-29T22:14:17.783 回答