【问题标题】:ignoring any 'bin' directory on a git project忽略 git 项目中的任何“bin”目录
【发布时间】:2010-12-01 00:45:25
【问题描述】:

我有一个这样的目录结构:

.git/
.gitignore
main/
  ...
tools/
  ...
...

在 main 和 tools 以及任何其他目录中,在任何级别,都可以有一个“bin”目录,我想忽略它(我也想忽略它下面的所有内容)。我已经在 .gitignore 中尝试了这些模式中的每一个,但它们都不起作用:

/**/bin/**/*
/./**/bin/**/*
./**/bin/**/*
**/bin/**/*
*/bin/**/*
bin/**/*
/**/bin/* #and the others with just * at the end too

谁能帮帮我?如果我这样做,第一个模式(我认为应该可以工作的模式)工作得很好:

/main/**/bin/**/*

但我不想为每个顶级目录都有一个条目,我不想每次添加新目录时都必须修改 .gitignore。

这是在 Windows 上使用最新的 msysgit。

编辑:还有一件事,有些文件和目录的名称中包含子字符串“bin”,我不希望这些被忽略:)

【问题讨论】:

  • 可能有人会觉得有帮助:如果您的存储库很少,并且每个存储库都有相同的 .gitignore 文件,则可以将其放入“通用”位置并启动 > git config --global core.excludesfile ~ /.gitignore_global 最后一个参数是公共位置的路径。附言我是 git 新手,不确定这是否是“最佳实践”建议。因此,如果您不想这样做,请告诉我。谢谢。
  • ** 语法似乎现在(2013 年 3 月,git 1.8.2)正式记录:见 my answer below
  • 如果有人想阅读最新版本的实际手册页,请参阅gitignore(5) Manual Page
  • 如果您厌倦了阅读论文以获取一行信息atlassian.com/git/tutorials/saving-changes/…,这是一个更友好的选择
  • 可能值得注意的是,在创建全局忽略文件时,将其命名为~/.cvsignore 是有益的。其他版本控制系统使用此名称,使其更加“全球化”。

标签: git gitignore


【解决方案1】:

你梦想中的.gitignore似乎是:

bin/

在顶层。

【讨论】:

  • 放入 gitignore_global
  • @GAlexander,为什么要全局忽略 bin/ 目录?他们通常有版本化的内容。并且全局忽略不会影响存储库的其他用户。
【解决方案2】:

在 1.8.2 版本之前,**.gitignore 中没有任何特殊含义。从 1.8.2 开始,git 支持 ** 表示零个或多个子目录(参见 release notes)。

忽略目录树中当前级别以下任何位置的所有名为 bin 的目录的方法是使用带有以下模式的 .gitignore 文件:

bin/

man 页面中,有一个使用类似模式忽略名为foo 的目录的示例。

编辑: 如果您的 git 索引中已经有任何您不想再跟踪的 bin 文件夹,那么您需要明确删除它们。 Git 不会仅仅因为它们现在匹配新的.gitignore 模式而停止跟踪已经被跟踪的路径。从仅索引 (--cached) 递归执行文件夹删除 (rm) (-r)。根 bin 文件夹的命令行示例:

git rm -r --cached bin

【讨论】:

  • 从 git 1.8.2 开始,git 将接受.gitignore 文件中的**(来源:1.8.2 changelog
  • binbin/ 一样吗?
  • @Nisba,它们不同,bin 将忽略名为 bin 的文件,而 bin/ 用于名为 bin 的目录
  • 因为我遇到了这个问题:git-command 中的文件夹名称区分大小写:) "bin !=Bin" - 也许我可以通过这个提示为某人节省几分钟:)
  • 在windows10中不能创建.gitignore文件,必须创建一个gitignore.txt然后在命令提示符下运行ren gitignore.txt .gitignore来创建这个文件
【解决方案3】:

我没有看到这里提到它,但这似乎是区分大小写的。一旦我更改为 /Bin,文件就会按预期被忽略。

【讨论】:

  • 这不是对明确关于bin 的原始问题的回答,而不是Bin
  • 虽然不是答案,但它确实增加了其他人在同一问题上搜索的完整性(我自己,刚刚)。
【解决方案4】:

** 以前从未正常工作过,但自从git 1.8.2 (March, 8th 2013) 之后,它似乎被明确提及和支持:

.gitignore.gitattributes 文件中的模式可以有 **/,作为匹配 0 级或更多级别子目录的模式

例如“foo/**/bar”匹配“foo”本身或“foo”的子目录中的“bar”。

在您的情况下,这意味着现在可能支持此行:

/main/**/bin/

【讨论】:

    【解决方案5】:
    [Bb]in/
    

    同时匹配大小写

    【讨论】:

    • [B]in/ 是唯一的大写字母
    • 如何只让Bin文件夹忽略而让bin提交到git? [B]in/ 将同时提交 Binbin
    • 应该这样做,@Gank:Bin/!bin/
    【解决方案6】:

    [Bb]in 会解决问题,但是... 这是您应该忽略的更广泛的内容列表(GitExtension 的示例列表):

    #ignore thumbnails created by windows
    Thumbs.db
    #Ignore files build by Visual Studio
    *.user
    *.aps
    *.pch
    *.vspscc
    *_i.c
    *_p.c
    *.ncb
    *.suo
    *.bak
    *.cache
    *.ilk
    *.log
    [Bb]in
    [Dd]ebug*/
    *.sbr
    obj/
    [Rr]elease*/
    _ReSharper*/
    

    【讨论】:

    • 注意:像这样的东西应该在你的 GLOBAL gitignore 中(通常在你的主目录中)。项目 gitignore 应该只忽略特定于你的项目的东西(即 C 应用程序的 .o 文件。)
    【解决方案7】:

    作为通知;

    如果您认为.gitignore 无法正常工作(因此在其中添加了foo/* 文件夹,但git status 仍显示该文件夹内容已修改或类似的内容),那么您可以使用它命令;

    git checkout -- foo/*

    【讨论】:

      【解决方案8】:

      我觉得对于 git 初学者来说值得一提:

      如果你已经签入了一个文件,并且你想忽略它,Git 如果您稍后添加规则,将不会忽略该文件。在这些情况下,你 必须先取消跟踪文件,方法是在您的 终端:

      git rm --cached

      因此,如果您想在编辑 .gitignore 后添加忽略本地存储库中的某些目录(已经存在),您想在根目录上运行它

      git rm --cached -r .
      git add .
      

      它基本上会“刷新”您的本地存储库并取消暂存被忽略的文件。

      见:

      http://git-scm.com/docs/git-rm,

      https://help.github.com/articles/ignoring-files/

      【讨论】:

      • 如果我通常在提交时使用git add -A,我可以使用它来代替吗?我也可以在第一行用 -A 替换点吗?
      【解决方案9】:

      如果您正在为任何 Visual Studio (.NET) 解决方案寻找一个出色的全局 .gitignore 文件 - 我建议您使用这个:https://github.com/github/gitignore/blob/master/VisualStudio.gitignore

      AFAIK 对于 .NET 项目,它拥有最全面的 .gitignore

      【讨论】:

      • 这并不能真正回答问题,但这正是我想要的。
      【解决方案10】:

      将 **/bin/ 添加到 .gitignore 文件对我有用(注意:bin 文件夹未添加到索引中)。

      【讨论】:

        【解决方案11】:

        对于 2.13.3 及更高版本,在 .gitignore 文件中仅写入 bin 应忽略 bin 及其所有子目录和文件

        bin

        【讨论】:

          【解决方案12】:

          第 1 步:将以下内容添加到文件 .gitignore。

          # User-specific files
          *.suo
          *.user
          *.userosscache
          *.sln.docstates
          
          # Build results
          [Dd]ebug/
          [Dd]ebugPublic/
          [Rr]elease/
          [Rr]eleases/
          x64/
          x86/
          bld/
          [Bb]in/
          [Oo]bj/
          
          # Visual Studio 2015 cache/options directory
          .vs/

          第2步:确保生效

          如果问题仍然存在,那是因为 .gitignore 中的设置只能忽略最初未跟踪的文件。如果版本控制系统中已经包含了一些文件,那么修改.gitignore是无效的。 要彻底解决此问题,您需要打开 Git BashPackage Manager Console(见下方截图)在存储库根文件夹中运行以下命令。

          git rm -r --cached .
          git add .
          git commit -m "Update .gitignore"

          那么问题就彻底解决了。

          【讨论】:

            【解决方案13】:

            实际上没有一个答案对我有用;唯一对我有用的是(在 Linux 上):

            **/bin
            (yes without the / in the end)
            
            git version 2.18.0 
            

            【讨论】:

            • 是否也忽略了子目录中所有名为bin 的文件夹?
            【解决方案14】:

            如果.gitignore 中的模式以斜杠/ 结尾,它只会找到与目录匹配的内容。

            换句话说,bin/ 将匹配目录bin 及其下的路径,但不会匹配常规文件或符号链接bin


            如果模式不包含斜线,比如bin,Git 会将其视为 shell glob 模式(贪婪)。所以最好使用简单的/bin

            bin 不是解决这个特定问题的最佳解决方案。

            【讨论】:

            • 您的意思是“以”/ 开头吗?
            【解决方案15】:

            在我的情况下 gitignore 文件的编码有问题,检查它是否是 UTF-8

            【讨论】:

              【解决方案16】:

              除了@CB Bailey 的回答:

              我试图从索引中删除多个名为 et-cache 的文件夹(在子文件夹中)(缓存来自 Wordpress 主题的文件夹)并从被跟踪中删除。

              我加了

              et-cache/
              

              .gitignore 文件。但是

              git rm -r --cached et-cache
              

              导致错误:

              致命:pathspec 'et-cache' 没有匹配任何文件

              所以解决方案是使用powershell:

              Get-ChildItem et-cache -Recurse |% {git rm -r --cached $_.FullName}
              

              这将搜索所有名为 et-cache 的子文件夹。然后使用每个文件夹路径(全名)将其从 git 中的跟踪中删除。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2010-11-08
                • 1970-01-01
                • 2012-01-21
                • 1970-01-01
                相关资源
                最近更新 更多