我怎样才能让 gitignore 与其他语言一起工作(比如韩语)

How could I make gitignore works with other language(like Korean)

我尝试将韩文文件(或其他语言)添加到 gitignore,但没有成功

在 .gitignore

#ignore 예제파일/ (=exmapleFile/)
예제파일/

有什么建议吗?

是完成这项工作的关键之一。另一个是确保文件 untracked.

未跟踪的文件是那些不在索引中的文件

索引,也称为暂存区,有时也称为缓存,控制文件是被跟踪还是未被跟踪。索引也是 Git 在进行新提交时使用的内容,因此索引中的每个文件都会进入您所做的 next 提交,一旦您进行了提交。要查看索引中每个文件的列表及其暂存信息,请使用 git ls-files --stage(请注意,这可能是一个很长的列表!):文件的路径名出现在每个输出行的末尾。

Git 报告一个 未跟踪的文件 在扫描目录的过程中,它遇到一个路径名为 (a) 的文件尚未在索引和 (b) 未在忽略或排除文件中列出。 (这里对目录有一些特殊处理,但让我们稍后再说。)

换句话说,索引中的任何文件都被跟踪。索引中 不是 的文件是未跟踪的,一些未跟踪的文件也会被忽略。至关重要的是,永远不会忽略被跟踪的文件。

路径名是 UTF-8 字符串

对于具有简单 ASCII 风格名称的文件,如 README.txtDocumentation/RelNotes/2.9.5.txt,路径名非常明显。它被编码为字节串:READMERelNotes 中的 R 是一个值为 82 的字节(无论如何是十进制:它是十六进制的 0x52 或八进制的 0122)。但是对于其他字符,例如 schön 中的 ö 或 agréable 中的 é,当然还有您的 예제파일(我不得不在此处剪切和粘贴 :-)),编码存在问题。

Git 选择 假设 所有文件名在其许多文件系统中都以 UTF-8. Your operating system may choose some other encoding internally—for instance, Windows uses UTF-16 编码——但 Git 假设UTF-8,具有许多优点,包括不需要字节顺序标记 (BOM)。这并没有解决所有问题——规范化仍然存在问题——但为我们指出了我们想要的 .gitignore 文件的答案。

(Git 在索引中也使用这种 UTF-8 格式。)

当 Git 读取 .gitignore 文件时,它会以 字节流 的形式打开文件,其中应包含 UTF-8 编码每个文件名,以换行符终止。然后,当 Git 去读取目录以从操作系统中提取文件(或子目录)名称时, Git 会将这些名称转换为 UTF-8 字符串。如果这些文件名表示 未跟踪的 文件,Git 会将生成的 UTF-8 字符串与 .gitignore 文件中每一行中的 UTF-8 编码字符串进行比较.

如果 UTF-8 编码字符串匹配,未跟踪文件的名称将被忽略(如果前缀为 !,则不被忽略,因为当然 all the usual rules 适用)。

如果 .gitignore 文件的内容不是 UTF-8 编码的字符串,尝试忽略将失败,因为 예제파일 的 UTF-8 表示(b'\xec\x98\x88\xec\xa0\x9c\xed\x8c\x8c\xec\x9d\xbc' in Python,例如)将不匹配相同字符的 UTF-16LE 表示:

>>> fn = b'\xec\x98\x88\xec\xa0\x9c\xed\x8c\x8c\xec\x9d\xbc'
>>> fn
b'\xec\x98\x88\xec\xa0\x9c\xed\x8c\x8c\xec\x9d\xbc'
>>> fn.decode('utf-8')
'예제파일'
>>> fn.decode('utf-8').encode('utf-16le')
b'\x08\xc6\x1c\xc8\x0c\xd3|\xc7'

旁注:目录和文件

Git 仅在存储库中存储 文件 。这在目录(必须存在以保存文件)和文件本身之间造成了一些紧张。一个副作用是您不能在 Git 提交中存储一个 目录(请参阅 How can I add an empty directory to a Git repository?),但另一个副作用是使用 .gitignore.

操作系统 查找 文件的功能通常要求您首先查看目录(或 "folder",如果您更喜欢这个比喻)。该目录在文件系统中有一个名称。 Git 将按名称打开目录,并通读其内容,一次一个条目。每个条目将列出一个文件名或另一个目录名。 Git 可以检查每个这样的文件名——在将它与父目录的名称和斜杠组合后,例如给出 dir/README.txt——对照索引(查看它是否被跟踪)然后,如果没有被跟踪, 针对所有忽略列表(查看 Git 是否应该抱怨它,或者忽略它)。

但是在一个目录里面搜索比较慢。假设 Git 有一个类似于 a/b/c/d 的路径,表示一个目录。 Git 可以 并且 首先查看索引以查看是否有任何文件已在 a/b/c/d 中被跟踪。如果是这样,Git 必须 读取目录。但如果没有,Git 现在可以检查所有忽略列表,看看 a/b/c/d 本身 是否被忽略。

如果a/b/c/d忽略,Git不会被强制读取其内容!如果 a/b/c/d 中有数百万个文件(无论是否在子目录中),这将节省大量时间。所以 Git 也这样做了。如果 Git 从不查看 内部 a/b/c/d,它永远不会在 a/b/c/d 中找到任何未跟踪的文件。这就是为什么在某些情况下您必须显式 取消忽略 目录:强制 Git 在 内部 查找未跟踪的文件。

(有人可能认为 .gitignore 中的列表类似于:

a/b/c/d
!a/b/c/d/e/important.file

足以告诉 Git:是的,忽略 a/b/c/d 中的所有内容,但 仍然在 d 中查找 d/e 然后 d/e/important.file 因为你将 必须 查看它的内部以取消忽略这样的文件。 和 Git 可能在某个时候变得如此聪明,但从历史上看,它并没有。所以这个规则是将它列为:

a/b/c/d/*
!a/b/c/d/e
a/b/c/d/e/*
!a/b/c/d/e/important.file

覆盖 a/b/c/d/e 的 "ignore everything" 规则:a/b/c/d 本身不会被忽略,因此 Git 打开并读取它。然后 a/b/c/d/<em>any</em> is 忽略除非 any 是明确的 e 而不是 被忽略。所以 Git 打开 a/b/c/d/e 并阅读它。 a/b/c/d/e 中的任何内容都将被忽略,除了 important.file。)