如何gitignore Go二进制文件?

Jul*_*ien 5 git gitignore

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

# no binaries
*/
!*.go/
!.gitignore
Run Code Online (Sandbox Code Playgroud)

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

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

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

我现在有

**/*  
!**/*.go
!.gitignore
Run Code Online (Sandbox Code Playgroud)

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

Cra*_*own 7

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

**/*
!**/*.go
!**/
Run Code Online (Sandbox Code Playgroud)

您可能还想看看这个问题,它询问的内容非常相似。


Cod*_*ard 5

您需要使用:

**/*.go
Run Code Online (Sandbox Code Playgroud)

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


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

允许较晚的内容!/abc/def覆盖 出现在同一文件中的较早的/abc内容,以便更容易表达。
.gitignore
everything in /abc directory is ignored, except for ...


.gitignore文档中:

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

Leading **

A leading **接下来是所有目录slash中的均值匹配。 例如,匹配任意位置的文件或目录,与模式相同。匹配直接位于目录下任何位置的文件或目录“bar” 。
**/foofoo foo
**/foo/barfoo

Trailing **

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

/**/

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

  • 我读了它,并尝试应用它,但没有成功。我想 *不* 忽略 *.go 源文件,但忽略它们的二进制文件(没有扩展名) - 还有更多提示吗? (2认同)