如何使用git add命令添加并追踪名称为foo/.git/bar的文件
问题原因
Git 出于自身工作逻辑与安全限制,默认会拒绝追踪任何路径中包含 .git 目录的文件,无论该 .git 是不是真实的 Git 仓库元数据目录,该规则优先级高于强制添加参数,所以你之前的 git add --force 操作也不生效。
推荐解决方案(适配所有Git版本,无安全风险)
你的场景使用 GNU stow 部署文件,可以直接利用 stow 自带的 dot 文件适配能力避开 Git 的限制:
- 把你当前仓库里的
foo/.git目录重命名为foo/dot-git,此时你的钩子文件路径为foo/dot-git/hooks/pre-push - 正常执行
git add foo/dot-git/hooks/pre-push提交即可,Git 可以正常追踪该路径下的文件 - 后续用 stow 部署时,添加
--dotfiles参数执行部署,stow 会自动把路径中前缀为dot-的目录/文件重命名为.开头,最终部署到目标仓库的路径依然是.git/hooks/pre-push,完全不影响你的使用需求。
特殊方案(仅Git 2.32及以上版本支持,不推荐)
如果你一定要在仓库中保留 foo/.git/ 路径的结构,可以执行以下配置放开限制:
# 配置当前仓库允许追踪.git路径下的文件 git config core.allowDotGit true # 强制添加目标文件 git add --force foo/.git/bar
注意该配置会放开 Git 对 .git 路径的安全防护,存在恶意代码被提交到 .git/hooks 等目录触发执行的风险,非必要不建议使用。
内容的提问来源于stack exchange,提问作者Jasha
相关产品推荐
相关产品推荐

