如何配置 git,以便 node_modules 可以在本地进行版本控制,但在推送时会被忽略?
Posted
技术标签:
【中文标题】如何配置 git,以便 node_modules 可以在本地进行版本控制,但在推送时会被忽略?【英文标题】:How can I configure git, so that node_modules can be versioned locally but ignored when pushing? 【发布时间】:2017-04-16 10:11:47 【问题描述】:有没有可能?
原因:不同的打包系统(例如 npm/yarn/..)访问 node_modules
,有时某些包会损坏。我们想要监控工具到底发生了什么变化。并且 node_modules 不应该被推送到开发服务器上。
【问题讨论】:
你不能,所以使用 Vampire 的技术(多个 Git 存储库)。 git的创造者没想到这种可能性? Git 是明确设计的,因此您不能阻止任何拥有存储库的人对存储库做任何他们想做的事情。存储库中的文件不是按路径名存储的,而是按“对象 ID”(哈希 ID)存储的,并且推送不是按文件完成的,而是由 commit 完成的。你要么有一个提交(然后你拥有所有),要么你没有(然后你什么都没有)。有一些方法可以只获得部分提交,而不是全部提交,但它们使用起来很棘手。 亲爱的 torek,在我看来这是一个必要的功能,它被遗忘了。 .gitignore_local 和 .gitignore_remote 是有意义的。我不想得到例如node_modules 来自远程,这些是本地生成的数据。但在某些情况下,我想知道本地发生了什么变化,即数据不太重要,我无法从远程获取的数据中生成它,但我对本地更改感兴趣。 请注意选择标签并阅读标签说明 - [yarn] 不适用于 Yarn 包管理器,那里有“请勿使用”通知提醒您。我已经为你编辑了标签,但要小心,因为有些标签有点不清楚。 【参考方案1】:这是不可能的。
您可以做的是从 Git 存储库中排除 node_modules
,并在 node_modules
中创建一个新的 Git 存储库
【讨论】:
谢谢,我目前是这样做的,但这是一个肮脏的把戏,而且配置不正确,.. 即使这是一个肮脏的伎俩,它也是唯一可能的解决方案。 git 是否跟踪某些东西。您不能仅“部分推送”存储库的子树。这在 Git 技术上根本不可能。 好的,我明白了,正确的答案是:不,不可能,还没有。 这正是我所说的。这永远不可能。完整的文件树是计算的哈希值的一部分。【参考方案2】:您可以定义以下结构:
/project
/my_node_modules
git init
在my_node_modules
中创建新存储库
使用https://***.com/a/14867050/637589 将默认node_modules
位置更改为文件夹/my_node_modules
【讨论】:
谢谢,我目前正在做类似的事情,但这是一个肮脏的把戏而不是正确的配置,..以上是关于如何配置 git,以便 node_modules 可以在本地进行版本控制,但在推送时会被忽略?的主要内容,如果未能解决你的问题,请参考以下文章