基于模式忽略文件的Git操作

10
我想忽略没有文件扩展名的可执行文件。
例如:
gcc -o foo foo.c

我知道可以将'foo'添加到我的.gitignore文件中,但如果我决定更改可执行文件的名称,则需要更新我的.gitignore文件...


你不能根据模式(权限)忽略文件,但正如Jefromi所说,你可以忽略所有没有扩展名的文件。 - Jakub Narębski
2个回答

9

我通常使用makefile技巧来处理这个问题。在我的Makefile中,我有可执行文件的名称 $(name),然后我会这样做:

#first rule
all: gitignoreadd ... more depends
    ... some commands ...

gitignoreadd:
    grep -v "$(name)" .gitignore > temp
    echo $(name) >> temp
    mv temp .gitignore

gitignoreremove:
    grep -v "$(name)" .gitignore > temp
    mv temp .gitignore

这个规则随后可以成为适当位置的某个 make 的依赖项。然后你通常会有一个 'make clean' 规则,如下:

clean: gitignoreremove
   rm *.o *.othergarbagefiles $(name)

这应该可以解决问题。虽然这是一个不太正规的方法,但对我而言是有效的。唯一需要注意的是,在更改名称之前必须运行 make clean 命令以自动清理所有内容。


8

最好还是手动维护.gitignore文件。你可以这样做:

*
!*.*

要排除所有内容,然后使用“.”来包含所有内容,但我怀疑您的目录没有扩展名。 当然,当前跟踪的目录仍将被跟踪,但是如果您添加了新目录,则git-status将无法看到它,并且您必须使用add-f 才能将其添加。

总之,假设所有没有扩展名的文件都不应该被跟踪可能不是一个好主意。 您可能会遇到一些自然存在的无扩展名文件 - 例如,README和INSTALL非常常见。 不小心忽略一个文件比修改gitignore要糟糕得多。 修改gitignore可能需要几秒钟时间,但是需要进行修改的时候很明显。 如果您不小心忽略了一个文件,就可能无法检查它并且丢失工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接