在Windows上忽略Git存储库中的目录

1520

在Windows上使用msysgit,如何忽略Git中的目录或文件夹?


你想要完全从仓库中排除缓存文件夹,还是只是它的内容? - Gareth
1
我猜测OP有多个缓存目录,其内容应该被忽略,但希望确保这些目录对于克隆存储库的任何人都会被创建。 - Mark Longair
@Gareth:由于空文件夹不会被Git跟踪,如果内容被忽略,那么文件夹也会被忽略,对吗? - eckes
正是如此,因此需要index.html文件。这样文件夹就不会是空的了。 - Hailwood
3
我之所以提到这个,是因为有些人使用隐藏文件(通常是.gitkeep)来表示应该保留的目录。 - Gareth
4
结尾的 / 是用来表示这是一个目录,应该被忽略吗? - Charlie Parker
21个回答

2152
在您的项目目录中创建一个名为.gitignore的文件。通过将目录名称输入文件中(附加斜杠)来忽略目录:
dir_to_ignore/

更多信息请点击这里


152
在Windows命令提示符中,您可以使用“edit .gitignore”或“notepad .gitignore”来创建正确的文件,但不改变原意。 - Joey Green
53
你也可以在Windows Git Bash命令提示符中使用“touch .gitignore”命令,这将创建正确命名的文件,然后可以使用记事本或类似软件进行编辑。 - SGB
42
只需在资源管理器中创建一个名为.gitignore的文件,并用记事本编辑它即可(末尾的点将被移除)。这样你就不必使用命令提示符了。 - P. Galbraith
6
你可以在终端中使用vim命令编辑.gitignore文件。 :) - MollyCat
44
即使这是最快的方法,但令人惊讶的是它没有被提到过,只需在控制台中键入“echo folder_to_ignore >> .gitignore”即可。 - Godsmith
显示剩余7条评论

237

默认情况下,Windows 资源管理器会显示.gitignore文件,实际上文件名是.gitignore.txt

Git不会使用.gitignore.txt文件。

您不能将文件重命名为.gitignore,因为Windows 资源管理器认为它是一种没有名称的gitignore类型文件。

非命令行解决方案:

您可以将文件重命名为".gitignore."文件,这将创建一个".gitignore"文件。

57
可以这样做吗?我通常只会告诉人们打开记事本,然后在另存为对话框中输入文件名并用双引号括起来,例如 ".gitignore",这样就可以保存而不会自动添加扩展名。 - Arrowmaster
13
整洁。包括一个句点是有效的。Explorer会去掉最后一个句点,导致文件名为“.gitignore”。我认为引号方法更加简洁,不太可能出现意外情况。 - Triynko
8
或者,在“另存为”对话框中,将文件类型更改为“所有文件(*.*)”- 然后Windows将不会添加任何扩展名。 - OsakaWebbie
7
在 Git Bash 中,只需在您的文件夹中键入 "touch .gitignore" 即可。 - Rayjax
6
".gitignore." - 这是个好技巧!我也经常遇到.htaccess的问题... - Obmerk Kronen
1
FYI,这不再适用于最新的Windows版本 - 现在您可以创建带有前导句点的文件。 - gen

142

似乎有两种主要的方法来忽略文件和目录:

  1. .gitignore

    • .gitignore 文件放置在代码库根目录中的 .git 文件夹旁边(在Windows上,请确保你看到真正的文件扩展名,然后创建一个以点结尾的空文件扩展名 .gitignore.
    • 创建全局配置文件 ~/.gitignore_global 并运行 git config --global core.excludesfile ~/.gitignore_global 将其添加到你的 Git 配置中

    注意:之前跟踪的文件可以通过运行 git rm --cached filename 取消跟踪。

  2. 仓库排除 - 对于不需要共享的本地文件,只需将文件模式或目录添加到文件 .git/info/exclude 中。这些规则不会被提交,因此其他用户无法看到。更多信息请参见此处

如需在忽略文件列表中添加例外,请参见此问题


50
指出 git rm --cached <文件名> 非常重要,特别适用于在创建 .gitignore 文件之前就已存在的代码库。 - MaurerPower
2
git rm --cached <filename> 解决了我在 .gitignore 文件中遇到的问题 :) - MeatFlavourDev
1
是的,git rm --cached 文件名绝对是至关重要的。因为在我明确声明要忽略的文件(在初始提交后创建了gitignore)中,git仍然在暂存文件,这让我感到非常疯狂。非常感谢! - Potaito
1
问题已解决。Git一直在跟踪我的Laravel存储库中的vendor文件夹,尽管我已经将vendor文件夹添加到gitignore中。非常感谢。 - Jayant
我的构建文件夹正在被跟踪。它一定是在构建后添加到.gitignore中的。无论如何,取消跟踪该文件夹的命令是:git rm --cached builds -r(其中builds是要取消跟踪的文件夹,-r表示递归,意味着所有文件和子文件夹都将被取消跟踪)。 - D. Kermott
对我来说,问题出在 node_modules 上,所以我需要运行 git rm --cached node_modules -r - James Mwase

67
在整个目录下忽略所有文件,请在此处放置一个名为“.gitignore”的文件,并写入“*”。 例如, 示例系统
/root/
    .gitignore
    /dirA/
        someFile1.txt
        someFile2.txt
    /dirB/
        .gitignore
        someFile3.txt
        someFile4.txt

目标

  • 忽略dirB/的内容

顶层 (/root/.gitignore)

  • 您可以在这里只写“dirB/

被忽略的目录 (/root/dirB/.gitignore)

  • 或者您可以在这里写“*”

Git会在文件系统的每个步骤中检查.gitignore文件。所以我选择了dirB/.gitignore中的“*”来忽略dirB/,包括其中所有的文件和子目录。

完成 ☺️


4
什么是标准的gitignore信息?你能举个例子吗?当你说“文件只需读取*”时,这是什么意思?我觉得这个答案让我一无所知,没有简单易懂的解释。标准的gitignore信息是指在Git版本控制系统中,用于告诉Git哪些文件或目录应该被忽略不进行版本控制的文件列表。例如,可以在.gitignore文件中列出要忽略的文件或目录名,如: # 忽略所有的 .log 文件 *.log # 忽略 build 目录下所有文件和文件夹 build/当说“文件只需读取”时,可能指的是.gitignore文件中包含的通配符,这个通配符代表匹配任意字符。但是需要更多上下文来确定确切的意思。希望这个解释对您有所帮助,如果您需要进一步的翻译,请随时提问。 - skdhfgeq2134
1
文件只有一个字符,一个单独的“*”符号。稍后我会进行审核并分享更多细节。 - J-Dizzle
1
我认为这样更加清晰,因为它不会使你的主要.gitignore文件混乱。 - itsfarseen
@skdhfgeq2134 在英语中,当你说"X reads as Y"时,意思是"Y被写在/在X上"。 - Frank Z.
1
请详细说明 - 我不确定你在说什么!分享更多细节,我会进行更新。 - J-Dizzle
1
在编程中,星号代表“所有”或“一切”。因此,在这种情况下,星号表示目录中的所有内容。 - Matt Lemmon

47

为了让Git忽略某些文件或文件夹,您需要创建.gitignore文件。

但在Windows资源管理器中,您必须为该文件提供一个名称。您不能只创建具有扩展名的文件。这个技巧是创建一个空的文本文件,然后转到命令提示符并将文件名更改为.gitignore

ren "New Text Document.txt" .gitignore

现在用你喜欢的文本编辑器打开文件,并添加你希望忽略的文件/文件夹名称。你还可以像这样使用通配符:*.txt


15
好的,我会尽力进行翻译。以下是需要翻译的内容:或者只需执行以下命令:echo dir_to_ignore/ > .gitignore - Oliver
2
或者输入 type nul > .gitignore 来创建一个空文件。 - Castro Roy
当文件扩展名在Windows资源管理器中未隐藏时,只需将文件命名为.gitignore - Vairis

45

我在 Windows 资源管理器 中创建一个以 . 开头的文件时遇到了一些问题。

解决方法是进入命令行窗口并使用 "edit" 命令创建一个新文件。


2
将文件名命名为.gitignore.可以避免Windows操作系统将其视为扩展名。这样,在输入时,没有扩展名的尾随点会被忽略,最终你会得到.gitignore。简而言之,尝试将其命名为.gitignore.,你最终会得到.gitignore - leerssej

32
如果您想维护一个文件夹但不是其中的文件,只需在该文件夹中放置一个名为".gitignore"的文件,并将"*"作为其内容。 这个文件将使Git忽略存储库中所有内容。 但是.gitignore将被包含在您的存储库中。
$ git add path/to/folder/.gitignore
如果您添加一个空文件夹,您将收到以下消息(.gitignore是一个隐藏文件)。
The following paths are ignored by one of your .gitignore files:
path/to/folder/.gitignore
Use -f if you really want to add them.
fatal: no files added
所以,使用"-f"来强制添加:
$ git add path/to/folder/.gitignore -f

27
在Windows中,斜杠有一个额外的注意事项。在.gitignore中使用以下代码来排除单个文件夹可能有效:

dir_to_exclude/

但是,如果要排除所有文件夹,则会导致问题,例如你的目录中有带有空格的文件名(如my file.txt):Git Bash会用反斜杠(如my\ file.txt)来转义这些空格,而Git for Windows不区分/\

要排除所有目录,请使用以下代码:

**/

连续两个星号表示目录内容。


26

您可以创建名为".gitignore"的文件,并将以下内容添加到其中:

*
!.gitignore

这对我有效。


4
这是最好的答案,它还可以带来项目部署和维护方面的附加益处。 - Nitin...
1
我还需要添加 /.gitignore 来忽略 .gitignore 文件本身。 - Diego Favero
为什么.gitignore文件名前要加上感叹号(!)?文档中说,感叹号符号可以否定指令。只需要包含*和.gitignore就可以了。更多相关细节请参考:stackoverflow.com/questions/10176875/add-gitignore-to-gitignore/10177000 - Matt Lemmon

24

如果您需要排除子文件夹,可以使用 ** 通配符来排除任何级别的子目录。

**/build/output/Debug/

我应该在哪里添加这个表达式? - skdhfgeq2134
请在“.gitignore”文件中添加@skdhfgeq2134。 - Cloud Cho

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