# 通过生成设定全局.gitignore_global 享受便捷代码生活

> 作者：zning（https://ning.ae） · 发布：2022/05/26 09:19 上午 (UTC+8) · 原文：https://zning.me/16535279437221.html

其实设定全局`.gitignore_global`这个事儿，经常用Git的开发者估计都有意识。不过在设定这个文件到底哪些需要被全局忽略的这件事儿上，可能因人而异的多一些。或者说都是通过自己使用的技术栈进行搜索哪些可以放在`.gitignore_global`中。

设定全局`.gitignore_global`有什么好处？

* 避免本地多个同技术栈项目频繁复制多个相同的`.gitignore`到每个项目中，造成管理上的不便。
* 如果大多数开发的项目有一定数据敏感，可以避免一些敏感信息（例如数据库文件、日志文件等）在忘记设定`.gitignore`的时候误操作提交上去。
* 对于一些IDE配置文件、临时文件（例如Vim、IntelliJ、VS Code等），我们没必要提交上去给其他开发者来使用，因为他们一般都会导入该工程，并且IDE能够生成跟他们本地环境一致的新的配置文件和临时文件。

当然，增加`.gitignore_global`可能会发生由于该工程没有`.gitignore`导致其他开发者在提交pr时没有设定`.gitignore`从而导致一些问题的发生。这里建议第一在项目`README.md`中说明之前本地全局设定的`.gitignore_global`提醒其他开发者在提交时注意规避相关文件，第二推荐其他用户也设定`.gitignore_global`，一劳永逸。

今天也是无意中发现了一个Gist上推荐了一个网站，<https://www.toptal.com/developers/gitignore/>网站可以根据所输入的技术栈，给你自动生成需要的`.gitignore`。

> 当然，这个toptal我稍微看了下，感觉是一个remote work的hiring，这个小功能估计也是为了吸引开发者来他们网站浏览的一种手段了 :D 不过如果觉得上面有合适的remote岗位的话，说不定可以试一试。
 
这里我稍微演示一下通过该网站生成并部署到SourceTree的情况：

1. 打开网站后，输入需要生成的技术栈并选中，可一次性输入多个（不过他这个没有数据库和日志相关的选项，如果有这类需求的需要自己去添加）：

    ![FireShot Capture 045 - gitignore.io - 为你的项目创建必要的 .gitignore 文件 - www.toptal.com](media/16535279437221/FireShot%20Capture%20045%20-%20gitignore.io%20-%20%E4%B8%BA%E4%BD%A0%E7%9A%84%E9%A1%B9%E7%9B%AE%E5%88%9B%E5%BB%BA%E5%BF%85%E8%A6%81%E7%9A%84%20.gitignore%20%E6%96%87%E4%BB%B6%20-%20www.toptal.com.png)

2. 单击“创建”，就看到为我们生成好的`.gitignore`配置文件啦~

    ![FireShot Capture 046 -  - www.toptal.com](media/16535279437221/FireShot%20Capture%20046%20-%20%20-%20www.toptal.com.png)

1. 在SourceTree(Mac)-偏好设置-Git中，选择红框中「全局忽略列表」的编辑按钮，即可打开本地`.gitignore_global`文件，将刚才生成的内容复制粘贴进去保存即可。

    ![WX20220526-091711@2x](media/16535279437221/WX20220526-091711@2x.png)

这样，当你在SourceTree进行提交的时候，SourceTree会自动读取`.gitignore_global`并忽略所有项目下相同忽略的内容，而无需每个项目单独配置`.gitignore`啦。

当然，如果想通过命令行设定`.gitignore_global`，也是可以的：

1. 打开终端。
2. 执行`touch ~/.gitignore_global`在当前用户家目录下创建全局`.gitignore_global`。
3. 编辑该文件，加入你需要全局忽略的文件列表。这里我们可以直接复制刚才生成的文件。
4. 执行`git config --global core.excludesfile ~/.gitignore_global`，即可实现全局忽略。
