背景
有一个团队项目文件夹(比如 project),是团队共同维护的 git 仓库。我在其中创建了一个本地只给自己看的私人文件夹(比如 local_docs),存放只给自己看的文档。
下文的叙述用"团队项目文件夹""私人文件夹"指代两者;命令示例中使用 project 和 local_docs 这两个名字,实际操作时替换成实际的文件夹名即可。
希望达成三件事:
- 向团队仓库提交时,完全忽略私人文件夹,个人文档不会混进团队提交;
- 不修改团队项目文件夹的
.gitignore——它是团队共享文件,不应为个人需求改动; - 团队项目文件夹和私人文件夹各自使用独立的 git:外层走团队仓库,内层自己管理版本历史,互不干扰。
操作步骤
第一步:让团队仓库忽略私人文件夹(不改 .gitignore)
cd project
echo "local_docs/" >> .git/info/exclude
.git/info/exclude 是每个 git 仓库自带的忽略文件,语法和 .gitignore 完全一样(一行一条规则)。区别在于:它存放在 .git 目录内部,只属于本地这一份副本,不会被提交、队友也看不到——正好满足"不动共享的 .gitignore 也能忽略"的需求。
第二步:在私人文件夹内初始化独立 git
cd project/local_docs
git init
之后在私人文件夹内正常使用 git 进行版本管理即可。
第三步:验证
验证外层已忽略:
# 验证外层已忽略
cd project
git status # 不应出现 __local_docs
git check-ignore -v __local_docs # 应输出一条来自 .git/info/exclude 的规则
# 验证内层独立
cd project/__local_docs
git rev-parse --show-toplevel # 应输出 __local_docs 的路径,而不是 project
注意事项
.git/info/exclude 只对当前这一份仓库副本生效。如果以后在别处重新克隆了团队项目,需要重新添加这一行。只在一台机器上维护一份副本的话,配置一次即可。
此外,如果一个文件已经被提交进仓库,exclude(和 .gitignore)对它都不起作用,需要先用 git rm --cached 把它从仓库记录中移除。如果文件夹是新建的、从未被提交过,不存在这个问题;但要注意顺序——先加忽略规则,不要先提交再补救。

Comments NOTHING