git submodule

添加子仓库到老仓库

1
git submodule add <gitUrl> <filePath>

例如

1
git submodule add -name <moduleName> <repo url> <filePath>

初始化子仓库

1
git submodule init && git submodule update

批量操作子模块

git submodule foreach

1
2
3
git submodule foreach git checkout master
git submodule foreach git status
git submodule foreach git pull

删除子模块

本地删除

git submodule deinit <submodule-name>

deinit 之后,只修改 $GIT_DIR/config file 文件。
本地仓库消失, git submodule update/git submodule foreach 等不会生效。
.gitsubmodule 仍然记录子仓库信息,不会影响远程仓库,使用 git submodule init 可以还原子仓库。

我理解为类似于 git 的 untrack 文件,让本地不跟踪改

永久删除

git rm <submodule file path>

此时 .gitsubmodule 信息也被删除,但是如果 git revert 的话撤销 commit 的还是可以恢复。

如果不想恢复,可以手动去删除

.git/modules/<submodule name>

路径下的文件夹

手动删除的土方法
  1. rm -rf 子模块目录 删除子模块目录及源码
  2. vi .gitmodules 删除项目目录下.gitmodules文件中子模块相关条目
  3. vi .git/config 删除配置项中子模块相关条目
  4. rm .git/module/* 删除模块下的子模块目录,每个子模块对应一个目录,注意只删除对应的子模块目录即可

子模块嵌套

需求:根仓库是个架子,子模块 1 不提交上远程仓库,仅在本地仓库维护。子模块中还有其他子模块 1.1,这时候可以

  • 子模块 1 使用 git clone,sunmodule 直接维护在子模块 1 仓库。
  • 忽略根仓库的 .gitmodules 文件

submodule 游离问题

父仓库记录了 submodule 提交时的 commit id,如果你 pull 父仓库前 submodule 没有子仓库 commit id 对应的代码,子仓库就会游离无法 git push,显示:

git submodule head detached

解决方案
建议

先把子仓库代码更到最新,再 git pull 父仓库,爸爸就能找到孩子,子仓库就不会游离了。

可以选择以下任意一个指令:

  • git submodule foreach git pull
  • git submodule update --remote

值得注意的是,git submodule update --remote 默认拉取 master 分支,如果要拉取 submodule 的其他分支,需要使用以下指令:

git config -f .gitmodules submodule.<subModuleName>.branch <branchName>

CommonJS 模块引用 node_modules 为什么不用路径

image.png
image.png

ps:先提交 submodule 再提交主 module,否则还需要提交一次主 module

spawn

Node 使用子进程执行命令行

image.png
image.png

AES 加密 Java 和 Node 不一致怎么解决?

检查密钥长度,是否为 16 位的,如果不是的话内部填充方法可能不一致。

css :only-child

只有一个子元素的时候使用

使用 Math.log 计算对数

Math.ceil(Math.log(1000) / Math.log(10))//3

UV 和 PV 是什么

为什么 1.toFixe() 报错,但是 (1).toFixed 不报错

如果不加括号,程序无法判断是你是浮点数还是引用属性(对象引用属性 a.b)

对于原始字面量的整型数字,使用原型链 Number 的方法时都需要使用 () 告诉程序你就要调用函数~

image.png
image.png

如何禁止反爬机制的无限断点

这个问题解决起来还是蛮简单的,问题解决只需要一句话:禁止断点。
而对应的操作是在Chrome控制台的Source Tab页点击Deactivate breakpoints按钮或者按下Ctrl + f8(下图)。