使用 git worktree 时包含node_modules

问题描述 投票:0回答:3

我有一个大型节点存储库,其中有一个

node_modules
文件夹,该文件夹未跟踪(包含在
.gitignore
文件中)。我最近开始学习 git worktrees,我希望能够添加包含
node_modules
文件夹的工作树,而不必在该工作树上运行 npm install 。有没有办法在不编辑
.gitignore
或手动复制文件夹的情况下完成此任务?我只是想在创建工作树时准备好工作树

提前致谢

搜索了相关问题,查看了git worktree的文档

git node-modules git-worktree
3个回答
0
投票

不确定这是否是您的意思,但您可以暂时从

node_modules
中删除
.gitignore
,并在将内容推送到上游后将该行添加回来。


0
投票

因此,我能想到的没有一种方法可以在不违反至少一个先决条件的情况下完成您所要求的任务。您必须执行以下 3 项中的一项:

  1. 在工作树中运行
    npm install
  2. 手动复制
    node_modules
  3. 暂时删除
    node_modules
    中的
    .gitignore
    (这会遇到必须从 git 中删除之前跟踪的
    node_modules
    的问题)。

我会推荐第一个(在你的工作树中运行

npm install
),原因正如@torek所说。您的
node_modules
中的依赖项版本可能略有不同,除非它与工作树中的
package_lock.json
1:1 匹配,否则您将陷入沮丧的世界,无论如何您最终都会运行
npm install

工作树的主要用例是因为我正在开发一个具有不同节点模块集的功能分支(例如角度版本升级功能分支),并且我需要签出开发或另一个功能分支以进行代码审查和我不想每次结帐到新分支时都必须运行

npm install


0
投票

npm 工作区

npm 工作空间 自动符号链接所有具有

node_modules
的子项目(工作空间)的
packages.json
目录。

这是一个示例项目结构

PROJECT /
   node_modules 
   packages / 
     client / 
         package.json
     server / 
          package.json
     wt-main/
           client/
           server/
   package.json

所有工作区包都有自己的 package.json,但会共享顶层

node_modules

从根运行

npm install
以解决所有工作区的依赖关系。
npm install
特定工作区的依赖关系
npm install package -w workspace
。例如,我可以通过执行
foo
来为我的
wt-main
工作空间停止
npm install foo -w packages/wt-main

package.json

中的工作区配置
  "workspaces": [
    "packages/*"
  ]

上述配置假设所有工作树都位于

packages/
中。工作树名称不能与分支名称相同。因此,为什么主分支工作树的名称是
wt-main
而不是仅仅
main

创建工作树

为主分支创建新的工作树

git worktree add packages/wt-main

切换到工作树

cd packages/wt-main

像平常一样启动 NPM 项目

npm run start
(或任何使用的东西)

工作区/工作树中将明显缺少

node_modules
,但该项目仍然有效!

.gitignore

最后,忽略任何实际上是工作树的包。这里的模式是以

wt-
开始工作树目录名称。

packages/wt-*

完成!我希望这有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.