为啥 git stash 删除我的 node_modules 文件夹?

Posted

技术标签:

【中文标题】为啥 git stash 删除我的 node_modules 文件夹?【英文标题】:Why is git stash removing my node_modules folder?为什么 git stash 删除我的 node_modules 文件夹? 【发布时间】:2016-09-13 18:43:29 【问题描述】:

我遇到了一个问题,当我运行git stash -u(即存储所有,包括未跟踪的文件)时,Git 会删除我的 node_modules 目录。最重要的是,它甚至无法在 git stash pop 上恢复它 - 我必须再次运行 npm install 才能恢复它。

node_modules 在 .gitignore 中被忽略(通过node_modules/* 行),据我所知,在项目的历史中从未提交过(git log --all -- node_modules 没有返回任何内容)。 git stash 不应该忽略它(即使在提交未跟踪的文件时)?我很确定我以前像这样使用过git stash,而 node_modules 没有任何问题。

更新:我已经检查过了,这个问题不仅限于特定项目 - 它似乎发生在我运行 git stash -u 的任何地方。值得一提的是,我的 Git 版本是 2.6.3.windows.1(在 Windows 上)。

【问题讨论】:

对我来说没问题。这似乎不是git中的问题。你可以在别人的机器上试一下,看看会不会发生? 你使用的 Git 版本和我一样吗? 没有。但我想这与Git的版本没有任何关系。赛义德在下面的回答可能有正确的方向。 嗯,假设它与 Git 的版本无关似乎有点草率,因为(a)它可能不应该发生(即。我不认为它是git stash 的预期行为和 (b) 这是以前不会发生的事情(在我的机器上)。 我的机器上有类似的问题。当我使用git stash -u 时,它会删除我所有的 NuGet 包,即使我的.gitignore 中有**/packages/*。我的 git 版本是 2.8.4.windows.1。 【参考方案1】:

您必须将您的 .gitignore 条目更改为:

node_modules/*

node_modules/

更多详情:Git Stash Can Delete Ignored Files (git stash -u)

【讨论】:

不幸的是,这对我不起作用 - 即使没有星号,git stash -u 仍然会删除 node_modules 文件夹。【参考方案2】:

npm 会创建非常长的路径,在 Windows 上可能超过 260 个字符的最大值,具体取决于您的 repo 根路径的长度。这可以解释为什么您有时会看到它有效,而其他时候则无效。如果您使用的是 npm,我建议确保您的存储库始终具有非常短的根路径。

【讨论】:

我认为 npm 2 曾经是这样,但是 npm 3 将所有子依赖项放在*** node_modules 文件夹中,因此您不再倾向于获得过去发生的大量嵌套。此外,根据我的经验,这往往会导致 Windows 无法 删除 node_modules,而我遇到的问题恰恰相反。此外,我不明白为什么 npm 的路径会特别导致 Git stash 出现问题。尤其是当 node_modules 无论如何都被 gitignored 时......

以上是关于为啥 git stash 删除我的 node_modules 文件夹?的主要内容,如果未能解决你的问题,请参考以下文章

git stash 储藏

git stash pop 冲突,git stash list 中的记录不会自动删除的解决方法

git stash

git之stash

git stash 保存当前工作状态

如何查看git stash内容