【问题标题】:How to ignore everything in a directory except one file如何忽略目录中除一个文件外的所有内容
【发布时间】:2016-09-12 12:45:45
【问题描述】:

回购结构:

.gitignore
file1
file2
dir/
    file3
    <stuff>

我想忽略 dir 中的所有内容,文件 3 除外。这是我的 .gitignore 文件中的内容:

dir/*
!dir/file3

但这似乎不起作用。 git 仍然尝试索引 dir 中的所有内容。我该如何解决这个问题?

更新 - 在删除旧的 .gitignore 文件并创建一个新文件后修复。新的不是使用&gt; .gitignore制作的。

【问题讨论】:

  • 如果该文件的父目录被排除,则无法重新包含该文件。 Source
  • @Alex.S 可以,你可以add -f 强制跟踪

标签: git


【解决方案1】:

正确的做法是:

!dir
dir/*
!dir/file3

注意还有其他的解决方案,比如在dir/中创建一个本地的.gitignore文件,会优先于上一个。

奇怪的是,我也尝试了你的解决方案,并且

dir/*
!dir/file3

似乎对我有用。如果有人可以对此发表评论,将不胜感激。

【讨论】:

  • 第二个有效,因为 dir/ 未被忽略。只有目录内容。并且您可以排除(取消忽略)其文件夹未被忽略的文件。
  • 我以前编辑过那个文档:stackoverflow.com/documentation/review/changes/2697。从那以后,后续的编辑……不太准确。
  • 好的,那么我对这里发生的事情有了更准确的了解。我可能会在几个小时 (~5) 内提交编辑,但同时也可以随意提交。这种“破坏行为”陷入低谷是一种耻辱。我相信编辑并不是真的要添加无效信息,但审稿人可能应该更仔细地检查它,至少尝试解决方案。我不能说我有多生气。文档应该准确,这就是它的用途。
  • 还有几个问题,然后:你的 git 版本是什么?我想你是从命令行使用它的?您是否尝试将 .gitignore 文件放在子目录中?
  • 可能与行尾有关,这是我的想法之一。我不知道 powershell 如何处理这些,但我很确定 git 需要 CR 而不是 CRLF,除非明确配置为。
【解决方案2】:

这对我有用:

!/dir/
/dir/*
!/dir/file3

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-26
    • 2011-07-19
    • 2013-09-26
    • 2016-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-17
    相关资源
    最近更新 更多