C项目的Git忽略文件

23

我刚开始学习C语言(使用Thinking In C),想知道在C项目的git仓库中应该忽略哪些文件。

建议越明显越好,因为我是一个完全的新手。谢谢!

5个回答

18
你还可以设置你的构建在一个子目录中,例如 build,然后您可以在.gitignore中忽略整个目录。

build/

这样就完成了。

18

我猜你会有一些生成的文件,你不想把它们放在仓库里(假设你的构建输出目录在git层级结构中):

  • 目标文件(.o, o.obj)
  • 库文件(.lib)
  • DLLs, 共享对象(.so, .dll)
  • 可执行文件(.exe, a.out ?)

GIT的忽略文件是我倾向于逐步进行的。"嘿,我不需要把这些东西放在我的仓库里" ...

编辑:关于dmckee的评论

是的,你绝对想要忽略交换文件、临时文件等。我将以下内容作为我的.gitignore基线:

  • *.swp
  • .~
  • thumbs.db

如果你的编辑器会自动备份(比如emacs的*~文件),那么你可能也可以不需要这些备份。 - dmckee --- ex-moderator kitten
2
通常,您将生成的文件忽略在版本控制和传输的.gitignore文件中(这样每个人都会忽略生成的文件),但是忽略备份文件和其他类型的文件取决于您的环境(备份文件可以是〜或.bak),不在传输存储库.git/info/exclude中(或在设置为~/.gitconfig中的core.excludesfile)。 - Jakub Narębski

4
我在我的.gitignore文件中使用了这个。 但我正在为微控制器构建,所以我不知道它是否能对你有所帮助。
最简单的方法是运行make clean,然后添加所有文件,接着运行make all,看看会出现什么额外的内容。
#Some of these are related to eclipse. So i keep them out of my repo
.cproject
.dep/
.project
.settings/

#files being edited
*~

# make and build files
*.lst
*.o
*.eep
*.lss
*.map
*.sym

# I keep these, since I prefer having the reference of the final build
# *.elf
# *.hex

1
Github的.gitignore文件模板涵盖了各种语言项目中大部分常见的文件。
C语言的.gitignore模板如下:
# Prerequisites
*.d

# Object files
*.o
*.ko
*.obj
*.elf

# Linker output
*.ilk
*.map
*.exp

# Precompiled Headers
*.gch
*.pch

# Libraries
*.lib
*.a
*.la
*.lo

# Shared objects (inc. Windows DLLs)
*.dll
*.so
*.so.*
*.dylib

# Executables
*.exe
*.out
*.app
*.i*86
*.x86_64
*.hex

# Debug files
*.dSYM/
*.su
*.idb
*.pdb

# Kernel Module Compile Results
*.mod*
*.cmd
.tmp_versions/
modules.order
Module.symvers
Mkfile.old
dkms.conf

不错!我推荐这个,因为这些模板是由编程社区的高技能成员集体努力的结果。 - Arvind Kumar Avinash

0

使用*nix系统和Makefile,您可以将每个生成的文件添加到.gitignore中。

作为示例,当从单个源创建可执行文件时(C可执行文件生成示例),我使用以下内容:

%: %.c
    gcc -o $@ $<
    grep '^$@$$' .gitignore > /dev/null || echo '$@' >> .gitignore

可以将以下行添加到其他配方中,以将目标$@添加到.gitignore文件中:

grep '^$@$$' .gitignore > /dev/null || echo '$@' >> .gitignore

解释:

  • grep '^$@$$' .gitignore:在.gitignore中搜索目标
    • ^表示行首
    • $$是一个单独的$(但Makefile需要$$才能工作),表示行尾
    • '^$@$$'代表目标名称
  • ||:仅在左侧命令失败时执行下一个命令
    • 因此,只有当grep ...未在.gitignore中找到目标名称时,才会执行echo ...
  • echo '$@' >> .gitignore:将目标名称添加到.gitignore

最终,您将添加清理和重建所有内容以确保正确忽略所有文件


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