在日常的开发中,当我们需要将一个项目提交到Git时,并不是所有的文件都需要提交,比如一些自动生成的文件,这时候就可以使用
.gitignore
来忽略一些不需要提交的文件,本文着重介绍一下.gitignore
的配置语法。
1. .gitignore文件
一般来说每个Git项目中都需要一个“.gitignore”文件,这个文件的作用就是告诉Git哪些文件不需要添加到版本管理中。实际项目中,很多文件都是不需要版本管理的,比如Python的.pyc文件和一些包含密码的配置文件等等。这个文件的内容是一些规则,Git会根据这些规则来判断是否将文件添加到版本控制中。这样,被过滤掉的文件就不会出现在git仓库中(gitlab或github)了,当然本地库中还有,只是push的时候不会上传。
需要注意的是如果你不慎在创建.gitignore
文件之前就push了项目,那么即使你在.gitignore文件中写入新的过滤规则,这些规则也不会起作用,Git仍然会对所有文件进行版本管理。简单来说,出现这种问题的原因就是Git已经开始管理这些文件了,所以你无法再通过过滤规则过滤它们。因此一定要养成在项目开始就创建.gitignore
文件的习惯,否则一旦push,处理起来会非常麻烦。
.gitignore
配置文件用于配置不需要加入版本管理的文件,配置好该文件可以为版本管理带来很大的便利
2. 配置规则
- 空行或是以
#
开头的行为注释; - 前面添加正斜杠
/
避免递归; - 后面添加正斜杠
/
忽略目录; *
匹配零个或多个字符;?
匹配单个字符;[]
匹配括号内的任一字符;!
表示不忽略(跟踪)匹配到的文件或目录;
下面我们看一些例子来理解上面的规则:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
# 忽略 .a 文件 不管是当前目录下还是子目录下的 .a 文件都忽略 *.a # 但否定忽略 lib.a, 尽管已经在前面忽略了 .a 文件 !lib.a # 忽略 m.b 文件,不忽略 mc.b ?.b # 忽略当前目录下 TODO 文件,但不包括子目录下的 subdir/TODO /TODO # 忽略 build/ 目录下的所有文件 不管是当前目录下的 build/ 还是子目录下的 build/ 都忽略 build/ # 忽略当前目录下的 now/ 目录 /now/ [abc] # 匹配a、b、c [0-9] # 匹配0至9的数 # 忽略 test/c.p, 不包括 server/test/c.p test/*.p # 忽略所有的 .pdf 文件 在 doc/ directory 下 doc/*/*.pdf |
3. 注意事项
- 配置文件的完整文件名就是".gitignore",注意最前面有个“.”;
- 配置文件是按行从上到下进行规则匹配的,如果前面的规则匹配的范围更大,则后面的规则将不会生效;
- 该文件只能作用于
Untracked Files
,也就是那些从来没有被 Git 记录过的文件(自添加以后,从未 add 及 commit 过的文件); - 如果文件曾经被 Git 记录过,那么
.gitignore
就对它们完全无效;
4. 配置样例
下面给出一个以Python开发为例的配置文件样例,更多配置请参考GitHub上gitignore仓库
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 |
# Byte-compiled / optimized / DLL files __pycache__/ *.py[cod] *$py.class # C extensions *.so # Distribution / packaging .Python build/ develop-eggs/ dist/ downloads/ eggs/ .eggs/ lib/ lib64/ parts/ sdist/ var/ wheels/ *.egg-info/ .installed.cfg *.egg MANIFEST # PyInstaller # Usually these files are written by a python script from a template # before PyInstaller builds the exe, so as to inject date/other infos into it. *.manifest *.spec # Installer logs pip-log.txt pip-delete-this-directory.txt # Unit test / coverage reports htmlcov/ .tox/ .coverage .coverage.* .cache nosetests.xml coverage.xml *.cover .hypothesis/ .pytest_cache/ # Translations *.mo *.pot # Django stuff: *.log local_settings.py db.sqlite3 # Flask stuff: instance/ .webassets-cache # Scrapy stuff: .scrapy # Sphinx documentation docs/_build/ # PyBuilder target/ # Jupyter Notebook .ipynb_checkpoints # pyenv .python-version # celery beat schedule file celerybeat-schedule # SageMath parsed files *.sage.py # Environments .env .venv env/ venv/ ENV/ env.bak/ venv.bak/ # Spyder project settings .spyderproject .spyproject # Rope project settings .ropeproject # mkdocs documentation /site # mypy .mypy_cache/ |
我的微信
扫一扫加我微信