除了一些例外,git的.gitattributes可以将所有文件视为二进制文件吗?

时间:2010-11-24 07:37:34

标签: git

我特别需要git将大多数文件扩展名视为二进制文件,除了一些扩展名。

我想将所有文件扩展名视为二进制文件,.pdf .doc .xls等,但.txt .rb .py等纯文本文件除外。

我尝试过配置.gitattributes,如下所示,看看它是如何工作的:

# cat .gitattributes 
* binary
*.txt text

我想也许配置文件中的顺序很重要,但似乎没有。使用上述配置,所有文件仍被视为二进制文件。

有没有办法配置.gitattributes或git以任何其他方式将所有文件作为二进制处理,除了少数例外情况?

更新1:

我尝试了下面描述的.gitattributes。它有效!

# cat .gitattributes 
*.txt crlf diff
* binary


# git diff
diff --git a/file b/file
index d929b94..bee5cb1 100644
Binary files a/file and b/file differ

diff --git a/file.txt b/file.txt
index 632ae98..93d22b0 100644
--- a/file.txt
+++ b/file.txt
@@ -1 +1,3 @@
 Hey this is a .txt file
+Adding another line
+A new line

更新2:

我相信crlf和text是相同的,即.gitattributes的以下两个配置是相同的:

# cat .gitattributes 
*.txt crlf diff
* binary

# cat .gitattributes 
*.txt text diff
* binary

2 个答案:

答案 0 :(得分:19)

binary是一个宏设置属性crlf和diff(实际上在这里取消设置)
请参阅USING ATTRIBUTE MACROS中的“.gitattribute man page”。

设置或取消设置属性后,如果后续规则无法更改。

所以你可以试试:

* binary
*.txt crlf diff

这样,crlfdiff被设置为*.txt个文件,对于那些相同的*.txt文件,它们不会被二进制宏取消设置,而它们将会所有其他文件都没有设置。

2009 commit b9d14ff开始,这些规则应该是:

  • 来自更一般的
  • 更具体的。
    (“后面的一行覆盖了早期的一行”)

答案 1 :(得分:1)

git没有“二进制”和“文本”文件的概念。它全部被定义为一组属性,它们指定我们应该如何进行合并,差异,CR / LF转换,处理空格,应用滤波器和其他数量的东西。

binary和语法一样

*.o binary
实际上是基于宏的,即binary是一个宏,它扩展到指定合并,差异,CR / LF处理等的各种属性。

据我所知,没有text宏。 binary扩展为-crlf -diff,因此禁用二进制文件并返回文本样式处理似乎是crlf diff