不同的添加到暂存的 git add 命令有什么区别?
标签
开发/Git
命令行/git
字数
488 字
阅读时间
3 分钟
git add -Agit add .git add -u
这三者都有什么区别?又各自有什么坑?
Git Version 1.x
| 命令 | 新文件 | 修改文件 | 删除文件 | 说明 |
|---|---|---|---|---|
git add -A | ✔️ | ✔️ | ✔️ | 暂存所有(新建、修改、删除的)文件 |
git add . | ✔️ | ✔️ | ❌ | 只暂存新文件和修改文件 |
git add -u | ❌ | ✔️ | ✔️ | 只暂存修改文件和删除文件 |
Git Version 2.x
| 命令 | 新文件 | 修改文件 | 删除文件 | 说明 |
|---|---|---|---|---|
git add -A | ✔️ | ✔️ | ✔️ | 暂存所有(新建、修改、删除的)文件 |
git add . | ✔️ | ✔️ | ✔️ | 暂存当前目录下所有(新建、修改、删除的)文件 |
git add --ignore-removal . | ✔️ | ✔️ | ❌ | 只暂存新文件和修改文件 |
git add -u | ❌ | ✔️ | ✔️ | 只暂存修改文件和删除文件 |
已知的坑
- 对于未正确配置
.gitignore和在git --config -g的.gitignore的系统或者git的运行环境而言,如果直接使用git add -A的话,会出现把.DS_Store这样的无效的文件或者Trash-0这样的会有权限异常或者已经不存在或者有 symlink 的文件或者目录添加到.git的问题,往往git add -A执行的时候就会出现问题,这对于集成了git clone和git pull的工具而言会比较 critical; - 对于未正确配置
.gitignore的git仓库,如果背后接入了 NFS 或者自定义的 FileSystem(文件系统),临时生成的文件:超大的 log,转换过的数据集,模型权重,或者huggingface-cli下载的模型,在使用git add -A的时候可能会遭遇 NFS 的性能瓶颈。
絢香猫