如何在Git父仓库中添加本地目录且仅跟踪后续修改
解决方案
方法一:用git add --intent-to-add实现精准跟踪(推荐)
这个命令的作用是告诉Git要跟踪目标文件/目录,但不把当前内容加入暂存区,刚好满足你“不提交初始内容,只跟踪后续修改”的需求。
操作步骤:
- 将本地的
SubDirectory完整复制到ParentRepository目录下 - 进入父仓库目录:
cd ParentRepository - 标记
SubDirectory为待跟踪但不暂存初始内容:git add --intent-to-add SubDirectory/ # 缩写形式:git add -N SubDirectory/ - 此时执行
git status会看到SubDirectory下的文件处于“待提交变更”状态,但初始内容并没有被暂存。之后你修改该目录下的任意文件,Git都会正常检测到变化,你可以像跟踪普通文件一样提交这些修改。
为什么git submodule/git subtree不适用?
git submodule是用来关联独立的Git仓库的,你的SubDirectory并非Git仓库,完全不匹配场景。git subtree的作用是将其他Git仓库的内容合并到当前仓库,同样不符合你“不跟踪初始内容”的核心需求。
方法二:兼容旧Git版本的临时忽略法
如果你的Git版本低于1.8.2(--intent-to-add在该版本后才支持),可以用这个替代方案:
- 复制
SubDirectory到父仓库后,在.gitignore中添加规则:SubDirectory/ - 提交这个忽略规则:
git add .gitignore git commit -m "Temporarily ignore SubDirectory" - 删除
.gitignore中对SubDirectory的忽略规则,然后强制添加目录到Git跟踪列表:git add -f SubDirectory/ - 取消暂存初始内容(关键步骤):
git reset HEAD SubDirectory/
完成后,SubDirectory已被Git标记为待跟踪,初始内容不会被提交,后续修改可正常跟踪提交。
内容的提问来源于stack exchange,提问作者Dude
相关产品推荐
相关产品推荐

