ChatGPT解决这个技术问题 Extra ChatGPT

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

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

您希望将缓存文件夹完全从存储库中排除,还是仅将其内容排除在外?
我猜 OP 有多个缓存目录,它们的内容应该被忽略,但要确保为克隆存储库的任何人创建这些目录。
@Gareth:由于 git 不跟踪空文件夹,如果内容被忽略,文件夹也会被忽略,不是吗?
我只提到因为有些人使用隐藏文件(通常是.gitkeep)来表示应该保留的目录
最后的 / 是什么让它知道它应该忽略的目录?

P
Peter Mortensen

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

dir_to_ignore/

更多信息是 here


在 Windows cmd 提示符下,您可以使用“编辑 .gitignore”或“记事本 .gitignore”来创建正确的文件。
或者您也可以在 Windows git bash 命令提示符下使用“touch .gitignore”,这将创建正确命名的文件,然后可以通过记事本等进行编辑...
或者只是创建一个名为 .gitignore 的文件。使用资源管理器并使用记事本对其进行编辑(将删除尾随点)。这样您就不必使用命令提示符。
或者你可以从终端 vim .gitignore 。 :)
或者,尽管这是最快的方法,但令人惊讶的是没有提到,只需在控制台中键入“echo folder_to_ignore>> .gitignore”。
V
Vairis

默认情况下,Windows Explorer 将显示 .gitignore,而实际上文件名是 .gitignore.txt

Git 不会使用 .gitignore.txt

而且您不能将文件重命名为 .gitignore,因为 Windows Explorer 认为它是一个没有名称的 gitignore 类型的文件。

非命令行解决方案:

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

这样可行?我一直只是告诉人们打开记事本并在“另存为”对话框中键入用双引号括起来的文件名,例如 ".gitignore",它会在不自动添加扩展名的情况下保存它。
整洁的。包括一个尾随期间确实有效。 Explorer 去掉最后一个句点,生成一个名为“.gitignore”的文件。我认为引号方法虽然更干净,但不太可能产生惊喜。
或者,在“另存为”对话框中,将文件类型更改为“所有文件 (.)”——然后 Windows 将不会附加任何扩展名。
或在 git bash 中,只需在文件夹中输入“touch .gitignore”
".gitignore." - 这是一个很棒的技巧!我也总是遇到 .htaccess 的问题......
P
Peter Mortensen

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

.gitignore 将 .gitignore 文件放在存储库的根目录中,除了 .git 文件夹(在 Windows 中,确保看到真实的文件扩展名,然后生成 .gitignore。(末尾的点是空文件扩展名))进行全局配置 ~/.gitignore_global 并运行 git config --global core.excludesfile ~/.gitignore_global 以将其添加到您的 Git 配置中注意:之前跟踪的文件可以通过运行 git rm --cached filename Repository exclude - 对于本地不需要共享的文件,您只需将文件模式或目录添加到文件 .git/info/exclude。这些规则未提交,因此其他用户看不到它们。更多信息在这里。

要在忽略文件列表中设置例外,请参阅 this question


很好地指出了git rm --cached <filename>。对于在您创建 .gitignore 之前存在的存储库绝对重要
git rm --cached 解决了我在使用 .gitignore 时遇到的问题 :)
是的 git rm --cached 文件名绝对至关重要。这让我发疯,因为 git 仍在暂存我明确声明要被忽略的文件(在初始提交后创建 gitignore)。非常感谢!
解决了我的问题。即使我在 gitignore 中添加了供应商文件夹,Git 仍在我的 laravel 存储库中跟踪供应商文件夹。非常感谢。
我的 builds 文件夹正在被跟踪。它必须在构建后添加到 .gitignore 中。无论如何,取消跟踪文件夹的命令是这样的: git rm --cached builds -r (其中 builds 是您要取消跟踪的文件夹, -r 是递归的,这意味着所有文件和子文件夹都将不被跟踪)
J
J-Dizzle

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

例如,

示例系统

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

目标

忽略 dirB/ 的内容

顶级 (/root/.gitignore)

你可以在这里“dirB/”

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

或者你可以在这里“*”

Git 在文件系统的每一步都监视 gitignore,所以如果在每个级别都有一些东西要忽略,那就把它放进去! (例如,在这里放置为“someFile3.txt”,或者如果您愿意,可以在根 .gitignore 中放置为“dirB/someFile3.txt”)

所以在这里,我选择 dirB/.gitignore 作为“*”来忽略所有内容,包括其中的所有文件和子目录。

完成☺️


什么是标准的 gitignore 信息?能给我举个例子吗?当您说“文件只是读为 * ”时,您是什么意思,这没有任何意义?我认为我没有从这个答案中理解任何内容,并且根本找不到它。
该文件是一个字符,一个“*”。我将稍后回顾并分享更多细节
我觉得这更干净,因为它不会弄乱你的主 .gitignore 文件
@skdhfgeq2134 英文,当你说“X 读为 Y”时,它的意思是“Y 写在 X 上/中”
@skdhfgeq2134:在编程中,星号 * 是“all”或“everything”的缩写。所以在这种情况下,“*”表示目录中的所有内容。
P
Peter Mortensen

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

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

ren "New Text Document.txt" .gitignore

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


或者只是: echo dir_to_ignore/ > .gitignore
type nul > .gitignore 创建一个空文件
或者,当文件扩展名未隐藏在 Windows 资源管理器中时,只需调用文件 .gitignore.
P
Peter Mortensen

我在 Windows Explorer 中创建一个开头带有 . 的文件时遇到了一些问题。

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


或者只是在末尾添加一个额外的 .,这样资源管理器就不会认为 .gitignore 是扩展名。然后在输入时,没有扩展名的尾随点就被吃掉了,你只剩下 .gitignore TL;DR:尝试将其命名为 .gitignore. =>你最终得到 .gitignore
P
Peter Mortensen

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

P
Peter Mortensen

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

dir_to_exclude/

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

/

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

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

**/

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


c
calraiden

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

*
!.gitignore

这个对我有用。


这是最好的答案,它还为项目部署和维护带来了额外的好处。
我还需要添加 /.gitgnore 来忽略文件 .gitignore 本身
为什么 !.gitignore 带有感叹号?文档说!符号否定指令。只需包括 * 和 .gitignore 就可以了。更多相关细节:stackoverflow.com/questions/10176875/add-gitignore-to-gitignore/10177000
E
Eat at Joes

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

**/build/output/Debug/

我应该在哪里添加这个表达式?
1
1ac0

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


我喜欢这种方法,我只是无法与那里的路径相处,我想忽略主仓库中的一个文件夹,怎么办?
但是您不应该将文件单独留在 .git 中(通过官方方式操纵内容)吗?
X
Xedret

当一切都失败时,尝试编辑文件

/.git/info/排除

并将您想要的目录添加到文件末尾,如下所示:

# 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”添加到要忽略的文件和目录列表中。


我在 Windows 10 上使用 Atom。它正在工作!多谢,伙计!
我用我目前的配置尝试了所有其他的,这是我最终的明确答案。
P
Peter Mortensen

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

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

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


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

在 Unix 上:

touch .gitignore

在 Windows 上:

echo > .gitignore

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

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

更多信息:.gitignore


“那就加个信息吧。” 你略过了一个比较重要的步骤。
P
Peter Mortensen

我认为问题是你的工作树是这样的:

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。我只是懒得处理这个测试用例。)


您可能确实想要提交 .gitignore,尤其是因为您可能想要跟踪它的更改,您的团队也是如此(如果您正在使用)。请参阅stackoverflow.com/a/767213/123033
@Dave Everitt:这正是我说“显然你也想提交 .gitignore”的原因。
P
Peter Mortensen

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

echo Flower_Data_Folder >> .gitignore

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

echo data.txt >> .gitignore

如果是像“Data/passwords.txt”这样的路径

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

P
Peter Mortensen

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

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

我将 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”
D
DINA TAKLIT

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

frontend/node_modules

那条线实际上会忽略什么?
前端/node_modules 文件夹;如果你有你的应用程序的后端和前端,你可以通过输入前端文件夹/node_modules 的名称来指定节点模块的忽略:)
A
ACB_prgm

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

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

所以 cd 到 Git 存储库目录

touch .gitignore
nano .gitignore

然后写下您想要忽略的文件和/或目录的名称及其扩展名(如果相关)。

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


C
Calvin Taylor

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

我在一个多项目 gradle 项目中有很多项目,他们可能需要很长时间才能删除它们,它们几乎相同但不同。有时我想通过完全删除它们来从 gradle 构建中删除它们。 git 毕竟可以让他们回来。但是我也不希望它们出现在 git status 中。所以我使用以下简单的程序;

删除我不想要的文件和文件夹。验证构建仍然有效告诉 git 暂时忽略已删除的文件(我们可以将它们取回)

git ls-files --deleted -z | git update-index --assume-unchanged -z --stdin

在没有目录的情况下继续生活,直到你想要他们回来。然后运行与以前相同的命令,但将假设未更改为 no-assume-unchanged

git ls-files --deleted -z | git update-index --no-assume-unchanged -z --stdin