当前位置:   article > 正文

git设置忽略文件.gitignore的方法_.gitignore文件

.gitignore文件

git设置忽略文件.gitignore的方法

对于经常使用Git的朋友来说,.gitignore配置一定不会陌生。废话不说多了,接下来就来说说这个.gitignore的使用
首先要强调一点,这个文件的完整文件名就是".gitignore",注意最前面有个“.”。

touch .gitignore

COPY

一般来说每个Git项目中都需要一个“.gitignore”文件,这个文件的作用就是告诉Git哪些文件不需要添
加到版本管理中。实际项目中,很多文件都是不需要版本管理的,比如Python的.pyc文件和一些包含密码的配置文件等等。这个文件的内容是一些规则,Git会根据这些规则来判断是否将文件添加到版本控制中。

下面我们看看常用的规则:

1)/mtk/ 过滤整个文件夹
2)*.zip 过滤所有.zip文件
3)/mtk/do.c 过滤某个具体文件

很简单吧,被过滤掉的文件就不会出现在git仓库中(gitlab或github)了,当然本地库中还有,只是push的时候不会上传。
需要注意的是,gitignore还可以指定要将哪些文件添加到版本管理中:
1)!*.zip
2)!/mtk/one.txt

唯一的区别就是规则开头多了一个感叹号,Git会将满足这类规则的文件添加到版本管理中。
为什么要有两种规则呢?想象一个场景:假如我们只需要管理/mtk/目录中的one.txt文件,这个目录中的其他文件都不需要管理,那么我们就需要使用:
1)/mtk/
2)!/mtk/one.txt
假设我们只有过滤规则,而没有添加规则,那么我们就需要把/mtk/目录下除了one.txt以外的所有文件都写出来!

最后需要强调的一点是,如果你不慎在创建.gitignore文件之前就push了项目,那么即使你在.gitignore文件中写入新的过滤规则,这些规则也不会起作用,Git仍然会对所有文件进行版本管理。
简单来说,出现这种问题的原因就是Git已经开始管理这些文件了,所以你无法再通过过滤规则过滤它们。因此一定要养成在项目开始就创建.gitignore文件的习惯,否则一旦push,处理起来会非常麻烦。

.gitignore配置文件用于配置不需要加入版本管理的文件,配置好该文件可以为版本管理带来很大的便利,以下是对于配置.gitignore的一些心得记录:
1)配置语法:
以斜杠“/”开头表示目录;
以星号“*”通配多个字符;
以问号“?”通配单个字符
以方括号“[]”包含单个字符的匹配列表;
以叹号“!”表示不忽略(跟踪)匹配到的文件或目录;

此外,git 对于 .ignore 配置文件是按行从上到下进行规则匹配的,意味着如果前面的规则匹配的范围更大,则后面的规则将不会生效;

2)示例说明
a)规则:fd1/
说明:忽略目录 fd1 下的全部内容;注意,不管是根目录下的 /fd1/ 目录,还是某个子目录 /child/fd1/ 目录,都会被忽略;
b)规则:/fd1/

说明:忽略根目录下的 /fd1/ 目录的全部内容;
c)规则:
/*
!.gitignore
!/fw/bin/
!/fw/sf/
说明:忽略全部内容,但是不忽略 .gitignore 文件、根目录下的 /fw/bin/ 和 /fw/sf/ 目录;

下面是线上使用过的一个gerrit里项目代码的.gitignore的配置(在项目中添加.gitignore过滤文件,在git push到gerrit里即可)

  1. [wangshibo@gerrit-server hqsb_android]$ cat .gitignore
  2. #Built application files
  3. *.apk
  4. *.ap_# Files for the Dalvik VM
  5. *.dex# Java class files
  6. *.class# Generated files
  7. */bin/
  8. */gen/
  9. */out/# Gradle files
  10. .gradle/
  11. build/
  12. */build/
  13. gradlew
  14. gradlew.bat# Local configuration file (sdk path, etc)
  15. local.properties# Proguard folder generated by Eclipse
  16. proguard/# Log Files
  17. *.log# Android Studio Navigation editor temp files
  18. .navigation/# Android Studio captures folder
  19. captures/# Intellij
  20. *.iml
  21. */*.iml# Keystore files
  22. #*.jks
  23. #gradle wrapper
  24. gradle/#some local files
  25. */.settings/
  26. */.DS_Store
  27. .DS_Store
  28. */.idea/
  29. .idea/
  30. gradlew
  31. gradlew.bat
  32. unused.txt

COPY

再看一例

  1. [wangshibo@gerrit-server hqsb_ios$ cat .gitignore
  2. # Lines that start with '#' are comments.
  3. # IntelliJ IDEA Project files
  4. .idea
  5. *.iml
  6. *.ipr
  7. *.iws
  8. out# Eclipse Project files
  9. .classpath
  10. .project
  11. .settings/bin/
  12. gen/
  13. local.properties.DS_Store
  14. Thumbs.db*.bak
  15. *.tem
  16. *.temp
  17. #.swp
  18. *.*~
  19. ~*.*

COPY

Git忽略规则及.gitignore规则不生效的解决办法

在git中如果想忽略掉某个文件,不让这个文件提交到版本库中,可以使用修改根目录中 .gitignore 文件的方法(如无,则需自己手工建立此文件)。这个文件每一行保存了一个匹配的规则例如:

此为注释 – 将被 Git 忽略

.a # 忽略所有 .a 结尾的文件
!lib.a # 但 lib.a 除外
/TODO # 仅仅忽略项目根目录下的 TODO 文件,不包括 subdir/TODO
build/ # 忽略 build/ 目录下的所有文件
doc/
.txt # 会忽略 doc/notes.txt 但不包括 doc/server/arch.txt
  规则很简单,不做过多解释,但是有时候在项目开发过程中,突然心血来潮想把某些目录或文件加入忽略规则,按照上述方法定义后发现并未生效,原因是.gitignore只能忽略那些原来没有被track的文件,如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的。那么解决方法就是先把本地缓存删除(改变成未track状态),然后再提交:

git rm -r --cached .
git add .
git commit -m 'update .gitignore'

注意:
  不要误解了 .gitignore 文件的用途,该文件只能作用于 Untracked Files,也就是那些从来没有被 Git 记录过的文件(自添加以后,从未 add 及 commit 过的文件)。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/417733
推荐阅读
  

闽ICP备14008679号