如何gitignore去二进制文件?

时间:2016-03-15 17:29:37

标签: git gitignore

我有一个.gitignore这样的文件:

# no binaries
*/
!*.go/
!.gitignore

我认为*/表示忽略所有子目录中的所有文件(因此每个文件都有),!*.go/表示不忽略所有子目录中的所有*.go文件,!.gitignore意味着不要忽略.gitignore

但是,我现在遇到的问题是,当我在子目录中创建一个新的*.go文件时,它现在被忽略了。

如何正确gitignore所有已编译的二进制文件,但不忽略*.go个文件?

我现在有

**/*  
!**/*.go
!.gitignore

但它仍然忽略ch1目录中的所有* .go文件。其他人有想法吗?

3 个答案:

答案 0 :(得分:4)

这将忽略除.go文件之外的所有内容,并且也适用于子目录:

**/*
!**/*.go
!**/

您可能还想查看this question,这是一个非常相似的问题。

答案 1 :(得分:3)

您需要使用:

**/*.go

**用于忽略任何文件夹内的文件,而不仅仅是当前文件夹中的文件。

在git v2.7中修复了一个小错误:

  

允许稍后的!/abc/def覆盖之前的/abc     出现在同一.gitignore文件中,以便更容易表达     的 everything in /abc directory is ignored, except for ...

来自.gitignore文档:

  

与完整路径名匹配的模式中的两个连续星号(**可能具有特殊含义:

<强> Leading **

  

A leading ** 后跟slash表示匹配所有目录
  例如,**/foo匹配文件或目录foo 任何地方,与模式foo相同。
  **/foo/bar匹配文件或目录&#34; bar&#34;直接位于目录foo下的任何地方。

<强> Trailing **

  

A trailing /**匹配里面的所有内容   例如,abc/**匹配 目录abc内的所有文件,相对于.gitignore文件的位置,具有无限深度。

<强> /**/

  

斜杠后跟两个连续的星号,然后斜杠匹配零个或多个目录。
  例如,a/**/b匹配a/ba/x/ba/x/y/b等等。

答案 2 :(得分:-2)

而不是你拥有的,试试这个:

*.go

如果您在忽略文件中使用此文件,则将忽略此类型的所有文件。