2011-11-27 146 views
4

有一些我们想要忽略的文件,而不是由git跟踪,我们无法弄清楚如何做到这一点。git如何配置为忽略文件?

我们有一些第三方的C图书馆是解压缩的,我们在Git中有它。但是,当你configure && make它,它会产生许多新的文件。如何编写.gitignore来跟踪源文件,而不是新的东西。 (它不像禁止*.o

编辑:至少有12个文件类型。所以我们不想枚举,我们想要哪种类型,哪种不需要。

+5

然后你想如何让git知道你想要什么文件,你不?你知道,它无法读懂你的想法... –

+3

它是*完全好*有一个30行.gitignore。 – Cascabel

+3

如果你真的会在你问的时候忽略所有新事物,那么它很容易在脚中拍摄自己,并忘记跟踪某些事物。明确指定要忽略的文件的唯一代价是所有12个文件,gitignore将会延长11行。你永远不会看它。你会写12行代码来正确解决问题,不是吗? – Cascabel

回答

6

使用!来包含您需要的所有类型的文件。像下面的例子”

* 
!*.c 
!*.h 
+0

什么是“!”运营商?我第一次听说它。 – drozzy

+1

@drozzy:它是一个可选的前缀,否定模式 –

3

明确指定哪些文件应该被跟踪,并忽略所有其他人可能是一个解决办法。*说:不顾一切和后续行指定的文件和目录应该忽视。允许使用通配符。

* 
!filename 
!*.extension 
!directory/ 
!/file_in_root_directory 
!/directory_in_root_directory 

记住顺序的问题。在年底把*让以前所有的线是无效的。

看看man gitignore(5)并搜索!。它说

模式具有以下格式:

  • (...)

  • 可选前缀否定该模式;任何先前模式排除的匹配文件将再次包含在内。如果否定模式匹配,这将覆盖较低优先模式源。

+0

请将“示例”复制到帖子中。如果链接死亡 - 这个答案是没用的。 – drozzy

0

我不知道为什么你说“它不是像禁止*.o”,但我觉得你的意思是,有没有您可以识别应用到生成的文件,但没有任何好的模式源文件?如果只是出现几件事情(比如在Linux上通常没有任何扩展的单个可执行文件),则可以在.gitignore中明确指定它们,所以它们不是问题。

如果确实有很多很多的文件是由构建过程生成的,它们与源文件共享扩展名和其他模式,那么只需使用包含源文件的模式即可。如果真的那么糟糕,你甚至可以把*放在.gitignore。这意味着当您键入git status时,不会显示新文件,或者在使用git add .时添加文件,但它不会损害已添加到存储库的任何文件; git仍然会告诉你有关他们的更改,并在你使用git add .时提取它们。它只会让你明确开始跟踪你所关心的文件更多的负担。

0

我会确保回购清洁(没有更改,没有未跟踪的文件),运行configure && make,然后将新的未跟踪的字段放入忽略文件。像git status --porcelain | fgrep '??' | cut -c4-这样的东西会自动拉出来,但它是值得一些眼球的时间,以确保是正确的...