【问题标题】:Is there a way to tell git to only include certain files instead of ignoring certain files?有没有办法告诉 git 只包含某些文件而不是忽略某些文件?
【发布时间】:2010-11-19 18:07:06
【问题描述】:

我的程序通常会生成巨大的输出文件(~1 GB),我不想备份到 git 存储库。所以不是能够做到

git add .

我必须做类似的事情

git add *.c *.cc *.f *.F *.C *.h *.cu

这有点麻烦……

我相当有信心我可以编写一个快速的 perl 脚本,将目录内容导入 .gitignore,然后删除基于 .gitinclude(或类似名称)文件的文件,但这似乎有点太老套了。有没有更好的办法?

【问题讨论】:

    标签: git gitignore


    【解决方案1】:

    如果您只是想包含点文件,这对我有用...

    !.*
    

    【讨论】:

      【解决方案2】:

      如果您需要忽略文件而不是目录中的特定文件,我是这样做的:

      # Ignore everything under "directory"
      directory/*
      # But don't ignore "another_directory"
      !directory/another_directory
      # But ignore everything under "another_directory"
      directory/another_directory/*
      # But don't ignore "file_to_be_staged.txt"
      !directory/another_directory/file_to_be_staged.txt
      

      【讨论】:

        【解决方案3】:

        聚会迟到了,但我的解决方案是为源文件设置一个目录,为可执行文件和程序输出设置一个不同的目录,如下所示:

        + .git
        |    (...)
        + bin
        |    my_exe.exe
        |    my_output.txt
        + src
             some_file.c
             some_file.h 
        

        ...然后只将src/ 中的内容添加到我的存储库并完全忽略bin/

        【讨论】:

          【解决方案4】:

          实现这一目标的最佳解决方案

          在存储库 root 中创建 .gitignore 文件,如果您只想包含 .c 文件,那么您需要将以下行添加到 .gitignore 文件

          *.*
          !*.c
          

          这将递归地包括目录和子目录中的所有 .c 文件。

          使用

          *
          !*.c
          

          不适用于所有版本的 git。

          经过测试

          git 版本 2.12.2.windows.2

          【讨论】:

          • 是的,我对* 也有同样的问题,不得不使用*.*。这是在 Windows 上使用 gitbash 和 git 版本 2.9.0.windows.1
          【解决方案5】:

          在您的存储库中创建 .gitignore 文件,并且您只想跟踪 c 文件并忽略所有其他文件,然后将以下行添加到其中...。

          *
          !*.c
          

          '*' 将忽略所有文件

          和!将否定文件被忽略....所以这里我们要求 git 不要忽略 c 文件....

          【讨论】:

          • 隐藏文件还需要.*吗?
          • * 即使对于. 也是通配符,因此隐藏文件也会被忽略,但所有以.c 结尾的隐藏文件都会被包括在内。
          • 使用这种方法我认为子文件夹中的文件也会被忽略。检查此以获取更多详细信息stackoverflow.com/a/11853075/739436
          • 我在我的主目录中使用此方法仅跟踪我的 .bashrc 和 .bash_history 例如.gitignore 文件中的* 后跟!.bash*
          • 您可能需要在 Windows 上使用*.* - 请参阅@Smaranjit Maiti 的答案
          【解决方案6】:

          我自己不需要尝试这个,但从我对TFM 的阅读来看,它看起来像一个否定模式会做你想要的。您可以使用以后否定的条目覆盖 .gitignore 中的条目。因此,您可以执行以下操作:

          *.c
          !frob_*.c
          !custom.c
          

          让它忽略除 custom.c 和任何以“frob_”开头的所有 .c 文件

          【讨论】:

          • 谢谢,T.E.D.这行得通。我所要做的就是用 * 开始 .gitignore 文件,然后列出我所有包含的文件模式,并以感叹号开头。
          • 文件夹怎么样?我找不到通过否定规则来包含文件夹和文件的方法。
          • 非常好。我正在使用它在我的主文件夹中有一个存储库,用于 vimrc 和 bashrc
          • 如果您想包含一个特定文件夹,@uzsolt 不起作用。见stackoverflow.com/questions/987142/…
          猜你喜欢
          • 2010-11-01
          • 2020-12-29
          • 1970-01-01
          • 1970-01-01
          • 2021-09-12
          • 1970-01-01
          • 2011-03-21
          • 2021-10-29
          • 1970-01-01
          相关资源
          最近更新 更多