2013-11-03 66 views
5

我正在生成大量二进制文件的C项目。我尝试将源保持在源代码控制之下。但是,我希望在创建新文件时不必将它们添加到gitignore文件即可忽略二进制文件。这是一个类似的沙箱,所以当我尝试新事物时,我创建了大量新的二进制文件。我可以将所有的二进制文件建立在一个目录中,或给它们一个后缀,但我不喜欢这些原因。由于GCC自动设置它生成的二进制文件的可执行位,我可以使用该标志忽略它们吗?根据需要创建新的.gitignore基于unix文件权限的gitignore

find . -type f -perm +0111 -print 

运行:

+2

为什么不在'bin /'或类似文件中构建可执行文件,然后使用gitignore'bin/*'? (这是行不通的吗?) – Izkata

+2

把所有东西都放进垃圾箱/工作得很好。我只是不想出于纯粹非理性的原因,我对.gitignore的功能很好奇,所以我希望能够一箭双雕。 – azani

回答

4

我建议不要这样做。如果您需要在构建过程中或运行时使用脚本,会发生什么情况,但是由于它具有可执行的位,它会被意外地改变名称?如果其他人在不了解gitignore的情况下为您的项目做出贡献,这可能会造成混淆。您最好手动添加文件(或使用bin目录)来解决此问题。

这就是说,gitignore似乎不支持基于模式的文件忽略,但您可以自动执行手动添加可执行文件的过程。

如果您.gitignore文件可以重写:

运行此更新您忽略的文件:find -type f -executable | sed 's#^.##' > .gitignore

如果您.gitignore文件应保持不变:

  1. 设置一个新的忽略文件(您现有的.gitignore仍应可用):git config core.excludesfile .auto_gitignore
  2. 运行此创建/更新您的忽略文件列表:find -type f -executable | sed 's#^.##' > .auto_gitignore
  3. 提交你的,如果你想与他人分享,或添加到.auto_gitignore.git/info/exclude如果你不.auto_gitignore。请注意,如果你确实分享了它,你的合作者也必须单独做第1步。

注:如果因为你发现的版本不支持-executable得到一个错误,用-perm /111更换。

+0

这将清除当前状态下'.gitignore'的所有其他条目。如果我们每次使用'>>'而不是'>'来扩大gitignore的大小。如果检测到'.gitignore',更好的解决方案可能是重定向到'.git/info/exclude',这将仅在本地排除文件。 –

+0

你说得对,但如果现有的.gitignore是空的或者没有创建(或者你只是手动恢复被重写的部分),那只是一个问题。另外,如果你使用'。git/info/exclude',那个文件不会与repo中的所有人共享,而且你可能会遇到同样的问题,它用'>'重写,或者用'>>'附加。我建议使用'>> .gitignore'来代替,并在提交之前手动删除文件中的重复项。 –

+0

假设我有20个可执行文件,我每次用'>>'运行命令生成每个新条目,我也会添加更老的20个条目。我不认为这可以手动解决。 –

0

不是直接的,但你可以使用find找到具有执行权限的程序。 (请注意,这是要小心使用;它会找到可执行的shell脚本,它是源文件,以及可执行的二进制文件。)