我们想要忽略一些文件,而不是通过git跟踪,我们无法弄清楚如何做到这一点。
我们有一些第三方C
库已解压缩,我们在Git中有它。但是当你configure && make
时,它会生成许多新文件。如何编写.gitignore
来跟踪源文件而不是新内容。 (它不像禁止*.o
)
修改:至少有12种文件类型。所以我们不想枚举,我们想要哪种类型,哪种类型不是。
答案 0 :(得分:6)
使用!
包含您需要的所有类型的文件。类似于以下示例中的内容“
*
!*.c
!*.h
答案 1 :(得分:3)
明确指定应跟踪哪些文件并忽略所有其他文件可能是一种解决方案。 *
表示忽略所有内容,后续行指定应忽略 的文件和目录。允许使用通配符。
*
!filename
!*.extension
!directory/
!/file_in_root_directory
!/directory_in_root_directory
请记住,订单很重要。将*
放在最后会使之前的所有行无效。
查看man gitignore(5)并搜索!
。它说
模式具有以下格式:
(...)
可选前缀!否定模式;之前模式排除的任何匹配文件将再次包含在内。如果否定模式匹配,则将覆盖较低优先级模式源。
答案 2 :(得分:0)
我不确定你为什么说“它不像禁止*.o
”,但我认为你的意思是没有任何好的模式你可以识别适用于生成的文件但不适用于源文件?如果它只是出现的一些东西(比如在Linux上通常没有任何扩展的单个构建的可执行文件),您可以在.gitignore
中明确命名它们,因此它们不是问题。
如果构建过程中确实有大量的文件与源文件共享扩展和其他模式,那么只需使用包含源文件的模式。如果真的那么糟糕,您甚至可以将*
放入.gitignore
。这意味着当您键入git status
时不会显示新文件,或者在您使用git add .
时添加,但它不会损害任何已添加到的文件存储库; git仍会告诉你有关它们的更改,并在使用git add .
时将它们取出。它只会给你明显开始跟踪你关心的文件带来更多负担。
答案 3 :(得分:0)
我会确保repo是干净的(没有更改,没有未跟踪的文件),运行configure && make
然后将新未处理的字段放入忽略文件中。像git status --porcelain | fgrep '??' | cut -c4-
这样的东西会自动将它们拉出来,但确保这是正确的,值得一些眼球时间......