转自: http://cwind.iteye.com/blog/1666646

有很多文件不必使用git管理。例如Eclipse或其他IDE生成的项目文件,编译生成的各种目标或临时文件等。使用git status时,会在Untracked files里面看到这些文件列表,在一次需要添加的文件比较多时(使用git add . / git add -u),会把这些所有的未跟踪文件添加进索引。

 
============一些牢骚============
     于是自然想要告诉git把这些文件忽略,我们当然会想到去Google,输入本文标题这个关键字(一部分人会直接去看document),然后当然会有很多解决方案,多数告诉我们在.gitignore文件中添加待忽略的文件目录列表;照做,问题很有可能依然存在。
     再Google,这次可能找到了help.github.com或stackoverflow上,看到一些原文的讨论;其中讲到在向.gitignore添加忽略文件之前一定要保证那些文件未被git跟踪,即先使用命令git rm --cached filename将它们从索引中删除。终于看到靠谱的解决方案不禁暗喜,照做--敲一下git status试试,问题很有可能仍然存在。
     太多中文“技术资料”是复制照搬过来的,转载的人自己并没有试过;稍好一点的在英文社区看到了相关讨论,随手翻译了一下发过来,可能存在理解上的问题或者忽略了一些细节,导致依然没办法解决问题。
     所以搜索引擎给出的中文的结果,有很多对解决问题丝毫无用的。Git忽略文件是很普遍也应该是很简单的一个问题,但多数帖子根本连这个问题都没搞明白,于是引发了这一系列的牢骚。
     遇到问题要多思考,想想问题的本质,解决方法的原理;最重要的是要切实地去动手做。
============牢骚结束============
 
解决方案:
1. 本地仓库忽略
本地仓库的文件忽略规则可以在.git/info/exclude文件中添加。这些忽略的文件不会提交到共享库中,因而不会被协作者所共享。
 
2. 当前工作目录添加文件忽略
对于每一级工作目录,创建一个.gitignore文件,向该文件中添加要忽略的文件或目录。但在创建并编辑这个文件之前,一定要保证要忽略的文件没有添加到git索引中。使用命令git rm --cached filename将要忽略的文件从索引中删除。
--摘抄.gitignore的格式规范
• 所有空行或者以注释符号 # 开头的行都会被 Git 忽略。
• 可以使用标准的 glob 模式匹配。
• 匹配模式最后跟反斜杠(/)说明要忽略的是目录。
• 要忽略指定模式以外的文件或目录,可以在模式前加上惊叹号(!)取反。
所谓的 glob 模式是指 shell 所使用的简化了的正则表达式。星号(*)匹配零个或多个任意字符;[abc] 匹配任何一个列在方括号中的字符(这个例子要么匹配一个 a,要么匹配一个 b,要么匹配一个 c);问号(?)只匹配一个任意字符;如果在方括号中使用短划线分隔两个字符,表示所有在这两个字符范围内的都可以匹配(比如[0-9]表示匹配所有 0 到 9 的数字)。
2.1 工作目录的每一层下级目录都可以有一个.gitignore文件,以说明当前目录下需要被git忽略的文件或目录
2.2 .gitignore文件可以被提交到共享库中被协作者共享
 
3. 全局的.gitignore
可以通过创建~/.gitignore_global并添加到git全局配置以减少每层目录的规则重复定义。使用命令git config --global core.excludesfile ~/.gitignore_global即可
.gitignore_global文件范例
  1. <span style="font-size: small;"># Compiled source #
  2. ###################
  3. *.com
  4. *.class
  5. *.dll
  6. *.exe
  7. *.o
  8. *.so
  9. # Packages #
  10. ############
  11. # it's better to unpack these files and commit the raw source
  12. # git has its own built in compression methods
  13. *.7z
  14. *.dmg
  15. *.gz
  16. *.iso
  17. *.jar
  18. *.rar
  19. *.tar
  20. *.zip
  21. # Logs and databases #
  22. ######################
  23. *.log
  24. *.sql
  25. *.sqlite
  26. # OS generated files #
  27. ######################
  28. .DS_Store
  29. .DS_Store?
  30. ._*
  31. .Spotlight-V100
  32. .Trashes
  33. Icon?
  34. ehthumbs.db
  35. Thumbs.db
  36. </span>

References:

2. 初次使用git-忽略某些文件, http://www.phperblog.net/?p=173
3. git ignore file, Git增加忽略文件, http://www.cnblogs.com/wucg/archive/2011/08/16/2141647.html

git忽略文件【转】的更多相关文章

  1. Git忽略文件方法【转】

    转自:http://www.cnblogs.com/shangdawei/archive/2012/09/08/2676669.html http://cwind.iteye.com/blog/166 ...

  2. eclipse设置git忽略文件

    使用eclipse开发的程序员们经常会接触版本控制软件,这里只要说下eclipse使用egit的情况下设置忽略文件. 特此说明在这里使用window->team->ignored对于git ...

  3. git忽略文件不起作用时

    开始我是直接进到仓库建立了.gitignore文件,再从仓库进入到项目add时总是会添加不需要添加的文件, 后来明白应该是在哪里提交在哪里创建.gitignore文件 git忽略文件操作步骤如下: 1 ...

  4. 添加git 忽略文件

    在使用Git的过程中,我们喜欢有的文件比如日志,临时文件,编译的中间文件等不要提交到代码仓库,这时就要设置相应的忽略规则,来忽略这些文件的提交. Git 忽略文件提交的方法 有三种方法可以实现忽略Gi ...

  5. Git 忽略文件

    在Git中如果想忽略掉某个文件,不让这个文件提交到版本库中,可以使用修改 .gitignore 文件的方法.这个文件每一行保存了一个匹配的规则例如: # 此为注释 – 将被 Git 忽略 *.a    ...

  6. 让git忽略文件模式的改变

    使用git的过程中发现,就算文件的内容没改变,只有文件的权限改变的话,git也会检测到文件被修改了. 解决方法是配置一下: git config --global core.filemode fals ...

  7. Git忽略文件权限

    有时 git diff 执行显示文件内容没变化,但是git status却是一片姨妈红: 原因是文件的权限,被chmod变化了,这种变化也被 diff 识别出来了,git diff某个文件类似如下: ...

  8. 在Mac上配置全局的Git忽略文件

    现在同时搞着好几个项目,在Xcode.IDEA.Eclipse之间频繁的切换,每个项目的忽略文件列表都不一样,每个项目都有一个.gitignore,甚是麻烦,今天网上拔出来一个设置全局忽略的办法,记录 ...

  9. git 忽略文件 .gitignore 以及规则

    git提供了文件忽略系统,当对工作区某个目录或文件设置了忽略后,在执行status查看状态时,被忽略的文件即使存在也不会显示出来. 这样我就可以把那些不需要上传,不需要保留的文件或目录忽略掉(比如一些 ...

随机推荐

  1. 1. ProGit-起步

    (1) 版本控制 本地式 大都是采用数据库记录文件的差异 典型的有rcs,主要保存并管理文件补丁,根据补丁去计算各版本文件内容 缺点:无法协同工作 集中式 通过一个单一的集中服务器去管理所有文件的修订 ...

  2. URAL 1920 Titan Ruins: the Infinite Power of Magic

    大意: 有一张N*N的网格,你每次可以走一步,每格只能走一次,有没有一种方法让走了L步后回到一个距原点1步远的格子?  没有输出Unsuitable device,否则输出Overwhelming p ...

  3. 成为嵌入式程序员应知道的0x10个基本问题

    预处理器(Preprocessor)1 . 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题) #define SECONDS_PER_YEAR (60 * 60 * 2 ...

  4. 设计模式之观察者模式(Observer)

    观察者模式原理:当有新的消息产生时发送给观察者,和中介者模式的不同地方是中介者模式强调中介的作用以及中介双方的交互,观察者模式是主动调用观察者成员函数进行消息发送. 代码如下: #include &l ...

  5. 【POJ】【2449】Remmarguts' Date

    K短路/A* 经(luo)典(ti) K短路题目= = K短路学习:http://www.cnblogs.com/Hilda/p/3226692.html 流程: 先把所有边逆向,做一遍dijkstr ...

  6. 【BZOJ】【3280】小R的烦恼

    网络流/费用流 和软件开发那题基本相同,只是多加了一个“雇佣研究生”的限制:不同价格的研究生有不同的数量…… 那么只需加一个附加源点,对每一种研究生连边 S->ss 容量为l[i],费用为p[i ...

  7. 斌哥的 Docker 进阶指南

    过去的一年中,关于 Docker 的话题从未断过,而如今,从尝试 Docker 到最终决定使用 Docker 的转化率依然在逐步升高,关于 Docker 的讨论更是有增无减.另一方面,大家的注意力也渐 ...

  8. http status 汇总

    http status 汇总 常见HTTP状态码 200 OK 301 Moved Permanently 302 Found 304 Not Modified 307 Temporary Redir ...

  9. input:text 的value 和 attribute('value') 不是一回事

    如题,input:text 当手工输入字符改变其值时,两者就不一样了. 要获得手工输入,不要用attribute('value'), 直接使用value: function getbyid(id){ ...

  10. php 如何判断一个常量是否已经定义

    php 如何判断一个常量是否已经定义 http://blog.csdn.net/raojinpg/article/details/6222882 如果看过手册的人肯定知道,可以直接忽视 不过在实际项目 ...