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


1105

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


您是否希望将缓存文件夹完全从存储库中排除,或者仅从其内容中排除?
Gareth 2012年

1
我猜想OP具有多个缓存目录,其内容应忽略,但要确保为克隆存储库的任何人都创建了这些目录。
Mark Longair 2012年

@Gareth:由于git不会跟踪空文件夹,因此如果忽略内容,该文件夹也会被跟踪,不是吗?
eckes 2012年

3
我只提到这是因为某些人(通常使用.gitkeep)使用隐藏文件来指示应保留的目录
Gareth 2012年

2
/在到底是什么使得它知道它的目录应该忽略?
查理·帕克

Answers:


1594

.gitignore在您的项目目录中创建一个命名文件。通过在文件中输入目录名称来忽略目录(带有斜杠):

dir_to_ignore/

更多信息在这里


130
在Windows cmd提示符下,您可以使用'edit .gitignore'或'notepad .gitignore'创建正确的文件。
乔伊·格林

44
或者,您也可以在Windows git bash命令提示符中使用“ touch .gitignore”,这将创建正确命名的文件,然后可以通过记事本之类的文件对其进行编辑……
SGB

39
或者只是创建一个名为.gitignore的文件。使用资源管理器并使用记事本对其进行编辑(尾随的点将被删除)。这样,您不必使用命令提示符。
P. Galbraith 2012年

6
或者,您也可以从终端中输入.gitignore。:)
MollyCat

34
或者,即使这是最快的方法,也没有令人惊讶地提及它,只需在控制台中键入“ echo folder_to_ignore >> .gitignore”即可。
Godsmith

205

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

Git不会使用 .gitignore.txt

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

非命令行解决方案:

您可以将文件重命名为“ .gitignore”。,它将创建“ .gitignore”

46
那个有效?我一直告诉人们打开记事本,然后在“另存为”对话框中输入用双引号引起来的文件名,例如".gitignore",它会保存文件名而不会自动添加扩展名。
Arrowmaster

9
整齐。包括尾随期确实有效。资源管理器剥离了最后一个期间,生成了一个名为“ .gitignore”的文件。我认为quotes方法更干净,并且不太可能产生意外。
Triynko 2011年

3
或者,在“另存为”对话框中,将文件类型更改为“所有文件()”-Windows将不会附加任何扩展名。
OsakaWebbie

5
或在git bash中只需在您的文件夹中键入“ touch .gitignore”
Rayjax 2014年

3
".gitignore."-这是很棒的把戏!我也总是遇到麻烦.htaccess...
Obmerk Kronen

105

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

  1. .gitignore

    • .gitignore文件放到除.git文件夹之外的存储库的根目录中(在Windows中,确保您看到了真实的文件扩展名,然后进行制作.gitignore.(最后一点是创建一个空文件扩展名))
    • 进行全局配置~/.gitignore_global并运行git config --global core.excludesfile ~/.gitignore_global以将其添加到您的Git配置中

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

  2. 存储库排除 -对于不需要共享的本地文件,只需将文件模式或目录添加到文件中.git/info/exclude。这些规则未提交,因此其他用户看不到它们。更多信息在这里

要在被忽略的文件列表中设置例外,请参阅此问题


36
指出问题git rm --cached <filename>。在您创建.gitignore
MaurerPower

2
git rm --cached <文件名>解决了.gitignore出现的问题:)
JeremyFelix 2013年

1
是的git rm --cached文件名绝对至关重要。由于git仍在暂存我明确声明将被忽略的文件(在首次提交后创建gitignore),这使我发疯。非常感谢你!
Potaito

1
解决了我的问题。即使我在gitignore中添加了供应商文件夹,Git仍在跟踪我的laravel存储库中的供应商文件夹。非常感谢。
Jayant

44

我有一些问题,创建在一个文件中的Windows资源管理器中有一个.开头。

一种解决方法是进入命令提示符并使用“编辑”创建一个新文件。


2
或者只是.在末尾添加一个额外的内容,这样资源管理器就不再考虑.gitignore扩展了。然后,在进入时,没有扩展名的尾随点被吃掉,您剩下.gitignore TL; DR:尝试命名它.gitignore.=>您最终得到.gitignore
leerssej

43

要指示Git忽略某些文件或文件夹,您必须创建.gitignore文件。

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

ren "New Text Document.txt" .gitignore

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


15
或者只是:echo dir_to_ignore /> .gitignore
Oliver 2010年

2
type nul > .gitignore创建一个空文件
Castro Roy

或者只是调用该文件.gitignore.时,文件扩展名不隐藏在Windows资源管理器
Vairis

22

如果要维护文件夹而不是其中的文件,只需在文件夹中放置一个“ .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

19

在Windows中,斜线有一个额外的收获。剔除在一个目录中的.gitignore

dir_to_exclude /

将可能工作,但排除所有具有以下内容的目录

/

当目录中的文件名带有空格(如my file.txt)时,会导致问题:Git Bash使用反斜杠(如my\ file.txt)来转义这些空格,而Windows的Git不能区分/\

要排除所有目录,请更好地使用:

** /

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


15

同样在您的\.git\info项目目录中,有一个排除文件实际上与.gitignore(我认为)相同。您可以在其中添加要忽略的文件和目录。


我喜欢这种方法,我只是无法与那里的路径相处,我想忽略主仓库中的文件夹,怎么办?
Shimmy Weitzhandler's

但是,您是否不应该将文件保留在.git中(通过官方方式处理内容)?
彼得·莫滕森

13

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

**/build/output/Debug/

12

要忽略Git中的整个目录,最简单的方法是在目标目录中包含一个.gitignore文件,该文件仅包含“ *”。

一个说明性的例子,

示例系统

/root/
    .gitignore
    /dirA/
        someFile1.txt
        someFile2.txt
    /dirB/
        .gitignore
        someFile3.txt
        someFile4.txt

目标

  • 忽略/ dirB /的内容

顶级.gitignore(/root/.gitignore)

  • 这是您的标准gitignore信息所在的位置

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

  • 该文件读为“ *”,目录本身,所有文件均被完全忽略!

就这么简单:)


10

如果其他所有方法都失败,请尝试编辑文件

/.git/info/exclude

并将所需目录添加到文件末尾,如下所示:

# git ls-files --others --exclude-from=.git/info/exclude
# Lines that start with '#' are comments.
# For a project mostly in C, the following would be a good set of
# exclude patterns (uncomment them if you want to use them):
# *.[oa]
# *~
assets/
compiled/

我将文件夹“ assets”和“ compiled”添加到要忽略的文件和目录列表中。


1
我在Windows 10上使用Atom。正在运行!多谢,伙计!
Putu De

我用当前配置尝试了所有其他配置,这是我最终的最终答案。
Xedret

9

在Unix上:

touch .gitignore

在Windows上:

echo > .gitignore

在终端中执行的这些命令将.gitignore在当前位置创建一个文件。

然后只需向该.gitignore文件添加信息(例如使用Notepad ++),哪些文件或文件夹应被忽略。保存您的更改。而已 :)

详细信息:.gitignore



8

我在让Git .gitignore在Windows 上获取文件时遇到了一些问题。该$GIT_DIR/info/exclude文件似乎总是可以工作。

但是,这种方法的缺点是,$GIT_DIR签入中不包含目录中的文件,因此无法共享。

ps $GIT_DIR通常是名为的隐藏文件夹.git


是的,Windows上的git对.gitignore真的很挑剔-本地排除文件可以满足我的需要。谢谢!
andersop

6

我认为问题在于您的工作树是这样的:

a-cache/foo
a-cache/index.html
b-cache/bar
b-cache/foo
b-cache/index.html
.gitignore

...与.gitignore您描述的一样。这将为您提供如下git status输出:

$ git status
# On branch master
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#    .gitignore
#    a-cache/
#    b-cache/

... 如果index.html文件还没有被添加到库中。(Git看到缓存目录中存在不可忽略的文件,但它仅报告目录。)要解决此问题,请确保已添加并提交index.html文件:

git add *cache/index.html
git commit -m "Adding index.html files to the cache directories"

...,git status然后您将看起来像:

$ git status
# On branch master
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#    .gitignore
nothing added to commit but untracked files present (use "git add" to track)

(显然,您确实也想提交.gitignore。我只是对这个测试用例感到懒惰。)


1
您可能确实想提交.gitignore,特别是因为您可能想跟踪它的更改,因此您的团队也是如此(如果您正在使用它)。请参阅stackoverflow.com/a/767213/123033
Dave Everitt 2013年

2
@Dave Everitt:这就是为什么我说“显然您确实也想提交.gitignore”的原因。
Mark Longair 2013年

6

在Windows和Mac上,如果要忽略当前目录中名为Flower_Data_Folder的文件夹,则可以执行以下操作:

echo Flower_Data_Folder >> .gitignore

如果是名为的文件data.txt

echo data.txt >> .gitignore

如果是类似“ Data / passwords.txt”的路径

echo "Data/passwords.txt" >> .gitignore. 

2

我有类似的问题。我在Windows工具链上与Linux共享仓库一起工作,他们很高兴在给定的文件夹中创建具有相同名称(大小写除外)的文件。

这样做的结果是,我可以克隆存储库,并立即拥有数十个“修改过的”文件,如果我签入,将造成严重破坏。

我将Windows设置为区分大小写,而Git设置为不忽略大小写,但是它仍然失败(显然是在Win32 API调用中)。

如果我gitignore文件,那么我必须记住不要跟踪.gitignore文件。

但是我在这里找到了一个很好的答案:

http://archive.robwilkerson.org/2010/03/02/git-tip-ignore-changes-to-tracked-files/index.html


链接似乎已断开(它首先重定向到'https'版本):“安全连接失败。与archive.robwilkerson.org的连接期间发生错误。PR_END_OF_FILE_ERROR”
Peter Mortensen19年

0

只需.gitignore在项目文件夹中创建文件,然后在其中添加该文件夹的名称即可,例如:

frontend/node_modules
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.