bash - 为什么 git 挂在 git commit 上,目录大约有 1000 个文件
问题描述
我有一个大型嵌套目录,其中包含 < 1000 个文件。它们位于外部硬盘驱动器上exthd
。
$ cd /Volumes/exthd/project
$ tree 10/44/
├── 0
│ └── record.yaml
├── 00
│ ├── 11
│ │ └── record.yaml
│ ├── 18
│ │ └── record.yaml
│ ├── 37
│ │ └── record.yaml
│ ├── 41
│ │ └── record.yaml
│ ├── 43
│ │ └── record.yaml
│ ├── 47
│ │ └── record.yaml
│ ├── 77
│ │ └── record.yaml
│ └── 83
│ └── record.yaml
├── 01
│ ├── 02
│ │ └── record.yaml
│ ├── 07
│ │ └── record.yaml
│ ├── 27
│ │ └── record.yaml
│ ├── 61
│ │ └── record.yaml
│ ├── 63
│ │ └── record.yaml
│ ├── 67
│ │ └── record.yaml
│ ├── 68
│ │ └── record.yaml
│ ├── 73
│ │ └── record.yaml
│ └── record.yaml
├── 02
│ ├── 17
│ │ └── record.yaml
│ ├── 33
│ │ └── record.yaml
│ ├── 38
│ │ └── record.yaml
│ ├── 47
│ │ └── record.yaml
│ ├── 58
│ │ └── record.yaml
│ ├── 63
│ │ └── record.yaml
│ ├── 77
│ │ └── record.yaml
│ └── 88
│ └── record.yaml
├── 02
│ ├── 01
│ │ └── record.yaml
│ ├── 41
│ │ └── record.yaml
│ ├── 48
│ │ └── record.yaml
│ ├── 73
│ │ └── record.yaml
│ ├── 83
│ │ └── record.yaml
│ └── record.yaml
├── 04
│ ├── 27
│ │ └── record.yaml
│ ├── 33
│ │ └── record.yaml
│ ├── 48
│ │ └── record.yaml
│ ├── 61
│ │ └── record.yaml
│ ├── 67
│ │ └── record.yaml
│ ├── 73
│ │ └── record.yaml
│ └── record.yaml
├── 05
│ ├── 08
│ │ └── record.yaml
│ ├── 11
│ │ └── record.yaml
│ ├── 17
│ │ └── record.yaml
│ ├── 38
│ │ └── record.yaml
│ ├── 41
│ │ └── record.yaml
│ ├── 53
│ │ └── record.yaml
│ ├── 58
│ │ └── record.yaml
│ ├── 71
│ │ └── record.yaml
│ └── 87
│ └── record.yaml
├── 06
│ ├── 07
│ │ └── record.yaml
│ ├── 11
│ │ └── record.yaml
│ ├── 31
│ │ └── record.yaml
│ └── 41
│ └── record.yaml
├── 07
│ ├── 43
│ │ └── record.yaml
│ ├── 67
│ │ └── record.yaml
│ ├── 78
│ │ └── record.yaml
│ ├── 88
│ │ └── record.yaml
│ └── record.yaml
├── 08
│ ├── 08
│ │ └── record.yaml
│ ├── 51
│ │ └── record.yaml
│ ├── 53
│ │ └── record.yaml
│ ├── 63
│ │ └── record.yaml
│ ├── 68
│ │ └── record.yaml
│ └── record.yaml
├── 08
│ ├── 01
│ │ └── record.yaml
│ ├── 67
│ │ └── record.yaml
│ ├── 73
│ │ └── record.yaml
│ ├── 77
│ │ └── record.yaml
│ └── 78
│ └── record.yaml
├── 1
│ └── record.yaml
├── 10
│ ├── 27
│ │ └── record.yaml
│ ├── 37
│ │ └── record.yaml
│ ├── 48
│ │ └── record.yaml
│ └── 88
│ └── record.yaml
├── 11
│ ├── 21
│ │ └── record.yaml
│ ├── 33
│ │ └── record.yaml
│ └── 47
│ └── record.yaml
├── 12
│ ├── 31
│ │ └── record.yaml
│ ├── 37
│ │ └── record.yaml
│ ├── 53
│ │ └── record.yaml
│ ├── 58
│ │ └── record.yaml
│ ├── 67
│ │ └── record.yaml
│ ├── 73
│ │ └── record.yaml
│ ├── 83
│ │ └── record.yaml
│ └── 87
│ └── record.yaml
├── 13
│ ├── 37
│ │ └── record.yaml
│ ├── 38
│ │ └── record.yaml
│ ├── 57
│ │ └── record.yaml
│ ├── 68
│ │ └── record.yaml
│ ├── 73
│ │ └── record.yaml
│ └── 88
│ └── record.yaml
├── 14
│ ├── 11
│ │ └── record.yaml
│ ├── 23
│ │ └── record.yaml
│ ├── 27
│ │ └── record.yaml
│ ├── 33
│ │ └── record.yaml
│ ├── 38
│ │ └── record.yaml
│ ├── 47
│ │ └── record.yaml
│ ├── 63
│ │ └── record.yaml
│ └── 88
│ └── record.yaml
├── 15
│ ├── 23
│ │ └── record.yaml
│ ├── 31
│ │ └── record.yaml
│ ├── 47
│ │ └── record.yaml
│ ├── 48
│ │ └── record.yaml
│ ├── 78
│ │ └── record.yaml
│ ├── 88
│ │ └── record.yaml
│ └── 87
│ └── record.yaml
├── 16
│ ├── 01
│ │ └── record.yaml
│ ├── 18
│ │ └── record.yaml
│ ├── 31
│ │ └── record.yaml
│ ├── 33
│ │ └── record.yaml
│ ├── 87
│ │ └── record.yaml
│ └── record.yaml
├── 17
│ ├── 27
│ │ └── record.yaml
│ ├── 87
│ │ └── record.yaml
│ ├── 88
│ │ └── record.yaml
│ └── record.yaml
├── 18
│ ├── 43
│ │ └── record.yaml
│ ├── 53
│ │ └── record.yaml
│ ├── 61
│ │ └── record.yaml
│ ├── 67
│ │ └── record.yaml
│ ├── 81
│ │ └── record.yaml
│ └── 87
│ └── record.yaml
├── 18
│ ├── 02
│ │ └── record.yaml
│ ├── 08
│ │ └── record.yaml
│ ├── 38
│ │ └── record.yaml
│ ├── 57
│ │ └── record.yaml
│ ├── 67
│ │ └── record.yaml
│ ├── 78
│ │ └── record.yaml
│ ├── 87
│ │ └── record.yaml
│ └── 88
│ └── record.yaml
├── 2
│ └── record.yaml
├── 20
│ ├── 27
│ │ └── record.yaml
│ ├── 53
│ │ └── record.yaml
│ └── 83
│ └── record.yaml
├── 21
│ ├── 18
│ │ └── record.yaml
│ └── 87
│ └── record.yaml
├── 22
│ ├── 02
│ │ └── record.yaml
│ ├── 08
│ │ └── record.yaml
│ ├── 13
│ │ └── record.yaml
│ ├── 31
│ │ └── record.yaml
│ ├── 38
│ │ └── record.yaml
│ ├── 61
│ │ └── record.yaml
│ ├── 73
│ │ └── record.yaml
│ ├── 87
│ │ └── record.yaml
│ └── 83
│ └── record.yaml
├── 23
│ ├── 02
│ │ └── record.yaml
│ ├── 17
│ │ └── record.yaml
│ ├── 47
│ │ └── record.yaml
│ ├── 58
│ │ └── record.yaml
│ └── 63
│ └── record.yaml
...~1000 or so files
我正在尝试将它们提交给大型 git repo:
$ git commit -v 10/44/ -m 'Autocommit'
但是微调器的东西在大约 3 秒后在终端中消失了,它只在那里停留了 > 10 分钟(在我取消该过程之前)。也没有看到详细的输出,即使指定-v
. 想知道如何让 git 提交这些文件,而不是一一提交。想知道为什么它在没有进行任何处理的情况下挂起,或者是否在后台发生了某些事情。根据我的经验,1000 个文件最多需要 5 分钟,但这要长得多。如果我缩短目录,同样的事情。
解决方案
首先要检查的是您的 Git 版本:
- Git 2.20 在树遍历中添加了优化,这可能会影响您的提交。
- GIt 2.18 中引入的提交图可以加快对最新提交的检索,以建立在下一个提交的基础上
- 已在 Git 2.19 中进行了优化
diff --historigram
- Git pack-object 的大小在 Git 2.21 中更小
- ETC...
推荐阅读
- python - Mongoengine - 查询包含满足多个条件的 EmbeddedDocuments 的文档
- r - 按一个因子对最低日期进行子集
- android - 如何将密码保存到手机上
- dataweave - 如何使用 Dataweave 2.0 从有效负载中获取数组中的值对象
- powershell - Mesmo importando Módulo no PowerShell - Comando não é reconhecido
- javascript - Express 验证器 isIn 功能无法正常工作
- python - 为自然语言处理建立数据结构朴素贝叶斯分类器
- c# - c#中空参数的自定义异常
- javascript - 有没有办法从 JavaScript 中的类方法中解构返回值
- html5-audio - 在录制 HTML 音频时避免爆裂声和咔嗒声