无知的 tonyseek

Yet Another Seeker

Git 忽略某个目录

有时候我们在给开源项目贡献代码的时候,会使用自己熟悉的工具链。比如 Python 项目,我可能就用 tox 来构建发型包并运行单元测试。或者有不习惯用 pyenv 或者 virtualenvwrapper 的同学,就可能直接使用 virtualenv 命令创建一个隔离的环境。

忽略但不提交

于是问题就来了,这些工具链都是会在项目目录中生成自己的工作目录的。 tox.tox 目录, virtualenvvenv 目录。这些目录对版本控制来说应该被忽略,但我们不是项目的主人,只是贡献者,直接修改项目根目录下的 .gitignore 会引起处女座的项目主人严重不适。

这个时候有个取巧的办法:进入这个要被忽略的目录,在目录下创建一个 .gitignore 文件,然后里面写 * 。这样这个目录就会被 git 默默忽略,而且不需要修改项目根目录的 .gitignore

提交且要忽略

类似的一个问题是项目根目录下可能有 logs 一类的目录,我们希望他人把仓库 clone 下来的时候能够已经携带了这个目录,但又不希望让这个目录中的日志文件进版本库。

之前看到一些项目用了一种比较 ugly 的做法:在 logs 下建立一个 .gitkeep 空文件(git 无法版本控制没有任何文件的空目录),然后再在项目根目录``.gitignore`` 中写入一行 logs/*

其实完全没有这样的必要,我们可以直接在 logs 里面写一个 .gitignore 文件,内容如下:

.gitignore
 *
 !.gitignore

然后 git add logs/.gitignore && git commit 提交。

这个 .gitignore 既留住了空目录,又声明了忽略。而且某天如果要删除 logs 目录,直接 git rm -r logs 即可,无需再修改项目根目录下的 .gitignore

Git Tips

Comments