新开的项目,按照常理出牌的话,一般都是需要使用 Git 来进行版本控制,以免代码数据丢失的。而使用 Git 的时候,按照常理出牌的话,一般是要给项目添加一个 .gitignore 文件,从而使那些不该纳入版本控制的文件能够被 Git 排除在外的。例如,使用 Python 开发的项目一般都需要将 .pyc 文件排除在外;使用编译型语言来开发的项目,一般会将可执行程序、中间编译结果文件等排除在外。

不加 .gitignore 的话,一般而言后果是很严重的。之前我刚开始接触 Python 开发的时候,就由于没有考虑这些,最后将所有 .pyc 文件都纳入了版本管理,到了后来发现了这个问题后,才不得不手动删除所有目录下的 .pyc 文件:

1
find . -name *pyc | xargs rm

更极端的例子发生在我认识的一位哥们身上。那哥们是做 iOS 开发的,习惯也很不错,所以给自己的代码加上了版本管理。可是有一天他忽然发现自己线上的 Git 仓库已经占用了几百兆,而且每次 push 的时候都需要上传很多东西。后来跑过来问我,我和他一起看了一下,最后确定就是把 XCode 的编译结果都纳入版本管理了。

好同学一定会给自己的项目添加 .gitignore

那么问题来了。对于不同的项目,因为使用的语言、工具(特别是 IDE)不同,在开发过程中项目所产生的无需加入版本管理的文件就也不同。 如果不能给自己的项目添加一个完善的 .gitignore,迟早有一些没有考虑到的文件会有可能被无意识地加入到版本控制中。为了解决这个问题,我之前一直通过 Google 来搜索相关的文章,最后也总能找到一些符合要求的从而借用过来。不过这种方法终究有点效率低下,不够自动化,所以我也一直不是很满意。

纠结的情况一直持续着,直到今天我发现了 gitignore.io 这个服务。gitignore.io 就是专门用来提供完善的 .gitignore 文件服务的。你在它的搜索框中输入符合自己开发情况的搜索条件之后,它就会提供最适合于你的项目的 .gitignore。譬如如果我是 iOS 开发者的话就会搜索:

按下 Generate 后,最终得到如下结果:

很赞的想法,很赞的实现!更赞的是,它满足了程序员切实的需求。不过这里还有一个不是很方便的地方:我们只能去 Web 页面拷贝相关的内容,然后再粘贴进我们的 .gitignore 文件中——用过 Vim 的同学都应该很清楚,这个过程是很“赞”的。

所以,我们需要在 Terminal 中就能够直接获取到 gitignore.io 的内容。最好,还能够直接把这些内容重定向到 .gitignore 文件中,一行命令搞定。很幸运的是,已经有人实现了这个想法,不幸的是,这个实现无法工作 :(。

嗯,那我就把它修复一下吧。所以,最终的结果是这样的。你只需要将:

1
2
3
function git-ignore-io() {
curl https://www.gitignore.io/api/$@ ;
}

加入你的 .bashrc 文件,然后重启 Terminal,输入:

1
git-ignore-io python > .gitignore

就可以在你的 Python 项目中“一键”加入完备的 .gitignore 了。

以后妈妈再也不会担心我把无关文件放到版本控制中去了。:)