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

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

1653475 次浏览

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

dir_to_ignore/

更多信息这里

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

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

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

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

ren "New Text Document.txt" .gitignore

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

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

Git不会使用.gitignore.txt

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

非命令行解决方案:

You can rename a file to ".gitignore.", and it will create ".gitignore"

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

我在让Git在Windows上获取.gitignore文件时遇到了一些问题。$GIT_DIR/info/exclude文件似乎总是有效的。

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

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

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

  1. . gitignore

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

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

    取消跟踪
  2. 对于不需要共享的本地文件,您只需将文件模式或目录添加到文件.git/info/exclude即可。这些规则未提交,因此它们不会被其他用户看到。更多信息是在这里

要在忽略文件列表中创建例外,请参阅这个问题

我假设问题是您的工作树就像:

a-cache/fooa-cache/index.htmlb-cache/barb-cache/foob-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.htmlgit 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)##    .gitignorenothing added to commit but untracked files present (use "git add" to track)

(显然你也想提交.gitignore。我只是对这个测试用例懒惰。)

如果您想维护一个文件夹而不是其中的文件,只需在文件夹中放置一个“. gitignore”文件,其中“*”作为内容。此文件将使Git忽略存储库中的所有内容。但.gitignore将包含在您的存储库中。

$ git add path/to/folder/.gitignore

如果您添加一个空文件夹,您会收到此消息(. gitignore是一个隐藏文件)

The following paths are ignored by one of your .gitignore files:path/to/folder/.gitignoreUse -f if you really want to add them.fatal: no files added

所以,使用“-f”强制添加:

$ git add path/to/folder/.gitignore -f

我也遇到过类似的问题。我在一个Windows工具链上工作,与Linux人共享存储库,他们很乐意在给定的文件夹中创建具有相同名称(大小写除外)的文件。

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

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

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

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

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

在Windows中,斜杠有一个额外的捕获。排除. gitignore中的单个目录

dir_to_exclude/

将可能工作,但不包括所有目录

//

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

要排除所有目录,最好使用:

**/

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

您可以使用以下内容创建“. gitignore”文件:

*!.gitignore

它为我工作。

要忽略整个目录,请在此处放置“*”的. gitignore。

例如,

示例系统

/root/.gitignore/dirA/someFile1.txtsomeFile2.txt/dirB/.gitignoresomeFile3.txtsomeFile4.txt

目标

  • 忽略dib/的内容

顶级/root/.gitignore

  • 你可以在这里“dib/

忽略目录/root/dirB/.gitignore

  • 或者你可以在这里“*”

Git在文件系统的每一步都监视gitignore。所以在这里我选择迪尔B/. gitignore作为“*”来忽略迪尔B/,包括其中的所有文件和子目录。

搞定☺️

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

**/build/output/Debug/

其他一切都失败了尝试编辑文件时

/.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/

我将文件夹“资产”和“编译”添加到要忽略的文件和目录列表中。

在Unix上:

touch .gitignore

在Windows上:

echo > .gitignore

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

然后只需将信息添加到此.gitignore文件(例如使用Notepad++)哪些文件或文件夹应被忽略。保存您的更改。就是这样:)

更多信息:. gitignore

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

echo Flower_Data_Folder >> .gitignore

如果它是一个名为data.txt的文件:

echo data.txt >> .gitignore

如果它是像“数据/passwords.txt”这样的路径

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

只需在您的项目文件夹中创建.gitignore文件,然后为ex添加文件夹的名称:

frontend/node_modules

这对一些人来说可能非常明显,但我确实从其他答案中理解了这一点。

在目录中创建. gitignore文件本身没有任何作用。您必须将. gitignore作为文本文件打开,并将您希望它忽略的文件/目录写入自己的行。

所以cd到Git存储库目录

touch .gitignorenano .gitignore

然后写入要忽略的文件和/或目录的名称以及它们的扩展名(如果相关)。

此外,. gitignore是某些操作系统(例如Mac)上的隐藏文件,因此您需要ls -a才能看到它,而不仅仅是ls。

暂时忽略已经在git中的目录/文件:

我在一个多项目gradle项目中有很多项目,他们可能需要很长时间才能删除它们,它们几乎都是相同但不同的。不时地,我想通过删除它们来从gradle构建中删除这些项目。git毕竟可以把它们拿回来。但是我也不希望它们以git状态显示。所以我使用以下简单的过程;

  1. 删除我不想要的文件和文件夹。
  2. 验证构建仍然有效
  3. 告诉git忽略删除的文件一段时间(我们可以找回它们)


git ls文件删除-z|git update-index假设不变-z--stdin

  1. 在没有dirs的情况下继续生活,直到你想要它们回来。然后运行与之前相同的命令,但将sease-不变切换为no-sease-不变


git ls文件删除-z|git更新索引--stdin