Git忽略文件方法【转】

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

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 文件中添加。这些忽略的文件不会提交到共享库中,因而不会被协作者所共享。
# git ls-files --others --exclude-from=.git/info/exclude# Lines that start with '#' are comments.# For a project mostly in C, the following would be a good set of# exclude patterns (uncomment them if you want to use them):# *.[oa]# *~
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文件范例

# Compiled source #
###################
*.com
*.class
*.dll
*.exe
*.o
*.so  

# Packages #
############
# it's better to unpack these files and commit the raw source
# git has its own built in compression methods
*.7z
*.dmg
*.gz
*.iso
*.jar
*.rar
*.tar
*.zip  

# Logs and databases #
######################
*.log
*.sql
*.sqlite  

# OS generated files #
######################
.DS_Store
.DS_Store?
._*
.Spotlight-V100
.Trashes
Icon?
ehthumbs.db
Thumbs.db  

文件 .gitignore 的格式规范如下:

• 所有空行或者以注释符号 # 开头的行都会被 Git 忽略。
• 可以使用标准的 glob 模式匹配。
• 匹配模式最后跟反斜杠(/)说明要忽略的是目录。
• 要忽略指定模式以外的文件或目录,可以在模式前加上惊叹号(!)取反。
所谓的 glob 模式是指 shell 所使用的简化了的正则表达式。星号(*)匹配零个或多个任意字符;[abc] 匹配任何一个列在方括号中的字符(这个例子要么匹配一个 a,要么匹配一个 b,要么匹配一个 c);问号(?)只匹配一个任意字符;如果在方括号中使用短划线分隔两个字符,表示所有在这两个字符范围内的都可以匹配(比如[0-9]表示匹配所有 0 到 9 的数字)。
我们再看一个 .gitignore 文件的例子:
# 此为注释 – 将被 Git 忽略
*.a # 忽略所有 .a 结尾的文件
!lib.a # 但 lib.a 除外
/TODO # 仅仅忽略项目根目录下的 TODO 文件,不包括 subdir/TODO
build/ # 忽略 build/ 目录下的所有文件
doc/*.txt # 会忽略 doc/notes.txt 但不包括 doc/server/arch.txt

Two things to keep in mind with ignoring files:

First, if a file is already being tracked by Git, adding the file to .gitignore won’t stop Git from tracking it.

You’ll need to do git rm --cached <file> to keep the file in your tree and then ignore it.

Secondly, empty directories do not get tracked by Git.

If you want them to be tracked, they need to have something in them.
Usually doing a touch .gitignore is enough to keep the folder
tracked.

You can also open
up $GIT_DIR/info/exclude ($GIT_DIR is usually
your .git folder) and edit that file for project-only ignores.

The problem with this is that those changes aren’t checked in,
so use
this only if you have some personal files that don’t need to be shared with
others on the same project.

Your final option with ignoring folders is adding a per-user ignore by
setting up acore.excludesfiles option in your config file.
You
can set up a .gitignore file in yourHOME directory that will affect all of your repositories by
running this command:

git config --global core.excludesfile ~/.gitignore

Read up on the manpage if
you’d like to learn more about how ignores work.
As always, if you have
other ignore-related tips let us know in the comments.

 

 

git忽略文件有三种:

1、全局范围内有效的忽略文件

就是"版本库根目录/.git/info/exclude",全局范围内的所有忽略规则都以行为单位写在这个文件中;

2、局部范围内有效的忽略文件

就是.gitignore,这个忽略文件只对某一级目录下的文件的忽略有效;
如果某一个目录下有需要被忽略的文件,那么就可以在该目录下手工地创建忽略文件.gitignore,
并在这个忽略文件中写上忽略规则,以行为单位,一条规则占据一行;
比较特殊的情况就是在版本库的根目录下创建一个忽略文件.gitignore,这时,
这个.gitignore忽略文件就对版本库根目录下的文件有效,等价于全局范围内的忽略文件.git/info/exclude;

3、手工指定一个忽略文件,

该忽略文件中的规则和语法与前两种是一致的,随便哪一级目录都可以,只要加上对应的路径即可;
  
手工指定忽略文件的命令是:
   git config --global core.excludesfile
/path/to/.gitignore
  
然后手工地在对应位置创建忽略文件.gitignore,并在该文件中写入忽略规则即可;

备注:
这三种范围级别的忽略文件的内容格式和语法都是一致的;

 

.gitignor文件同样可以像其它文件一样加到项目仓库里( 直接用 git
add .gitignore 和 git commit等命令), 

这样项目里的其它开发者也能共享同一套忽略
文件规则。

 

如果想要连.gitignore文件自己也忽略呢?一样的道理,只要在文件内加上.gitignore即可。

 

如果你想忽略规则只对特定的仓库起作用,你可以把这些忽略规则写到你的仓库下

 

.git/info/exclude
文件中,或是写在Git配置变量

 

core.excludesfile 中指定的
文件里。

 

有些Git命令也可在命令行参数中指定忽略规则,你可以在这里:gitignore
查看详细的用法。

 

github中不加入版本控制.gitignore设定
JAN 19TH, 2012
这几天研究github page,由于用jekyll本地测试时会生成_site文件夹,
所以需要把这个文件夹排除在外再提交到github,到底怎么设置呢?

这就需要用到.gitignore,即不加入版本控制,在git根目录下建立.gitignore,具体设定如下:

tmp.txt         //忽略tmp.txt
*.log           //忽略所有log文件
tmp/*           //忽略tmp文件夹所有文件
log/**/*.log    //忽略log目录下的包括子目录下的所有log文件
其他的一些过滤条件

?:代表任意的一个字符
*:代表任意数目的字符
{!ab}:必须不是此类型
{ab,bb,cx}:代表ab,bb,cx中任一类型即可
[abc]:代表a,b,c中任一字符即可
[ ^abc]:代表必须不是a,b,c中任一字符
由于git不会加入空目录,所以下面做法会导致tmp不会存在

tmp/*             //忽略tmp文件夹所有文件
改下方法,在tmp下也加一个.gitignore,内容为

*
!.gitignore
还有一种情况,就是已经commit了,再加入gitignore是无效的,所以需要删除下缓存

git rm --cached ignore_file
这样就OK了。

 

时间: 2024-09-27 08:58:53

Git忽略文件方法【转】的相关文章

git忽略文件【转】

转自: http://cwind.iteye.com/blog/1666646 有很多文件不必使用git管理.例如Eclipse或其他IDE生成的项目文件,编译生成的各种目标或临时文件等.使用git status时,会在Untracked files里面看到这些文件列表,在一次需要添加的文件比较多时(使用git add . / git add -u),会把这些所有的未跟踪文件添加进索引.   ============一些牢骚============      于是自然想要告诉git把这些文件忽略

git临时忽略文件命令使用例子

git 中要在版本库中忽略某些文件,第一选择选择应该是使用 ".gitignore" 配置文件,该方式是永久忽略,如果要忽略某个已经在版本库中的文件,那么先要从版本库中移除,然后.gitignore中的配置才会生效. git 还有一种临时忽略文件的方式,命令为: git update-index --assume-unchanged 这种方式忽略可以让该文件还继续保留在版本库中,但是本地修改文件后,不会提示有修改,也就不需要提交. 既然是临时忽略,那么也可以解除临时忽略,命令为: gi

SVN忽略文件或文件夹几种方法总结

每个项目中的配置文件都有区别,在本地开发和线上生产,之前一直很懒,不想去忽略提交一些配置文件,只是在提交的时候排除掉.但是在项目上传部署的时候又必须小心,害怕覆盖线上的配置,今天就硬头皮看一下. 如果你使用的是WIN,那么可以在SVN右键菜单里设置,可以设置全局忽略条件或者单独忽略掉一个文件以及文件夹,下面是command-line下的操作. 使用svn propset svn:ignore  代码如下 复制代码 lch@localhost:kidulty_www $ svn st M     

TortoiseSVN设置忽略文件和目录文件夹

TortoiseSVN设置忽略文件和目录文件夹  在多数项目中你总会有文件和目录不需要进行版本控制.这可能包括一些由编译器生成的文件,*.obj,*.lst,或许是一个用于存放可执行程序的输出文件夹.只要你提交修改,TortoiseSVN 就会在提交对话框的文件列表中显示出未版本控制文件.当然你可以关闭这个显示,不过你可能会忘记添加新的源文件.   最好的避免类似问题的方法是添加参考文件到该项目的忽略列表.这样他们就永远不会出现在提交对话框中,而真正的未版本控制文件则仍然列出. 方法一 在资源管

使用AndroidStudio上传忽略文件至SVN Server的解决办法_Android

在同组项目进行共享时,容易把本地的配置文件比如*.iml等文件上传至共享服务器,这样会对队友造成巨大的麻烦,为了解决这个问题,可以使用下面方法解决,下面以上传到服务器的app.iml文件为例. 一.在AS的Setting中取消忽略文件后缀".iml": 二.在Windows目录中找到当前项目下的"app.iml"文件,右键该文件,选中TortoiseSVN,如下图2位置: 图2 在该项下选择Delete,删除该文件,如下图3所示: 图3 三.删除该文件后,在当前目录

在Linux下搭建Git服务器的方法详解_相关技巧

前言 GitHub就是一个免费托管开源代码的远程仓库.但是对于某些视源代码如生命的商业公司来说,既不想公开源代码,又舍不得给GitHub交保护费,那就只能自己搭建一台Git服务器作为私有仓库使用. 我打算自己搭建git服务器.虽然目前已经有很不错的git工具,如github,coding.net等,但是为了安全,减少限制和开销,还是放在自己的服务器为好.下面给出安装配置的过程,有问题欢迎讨论和交流,我会及时回复的. 第一步 安装git:可以通过命令的方式快速安装,不同的linux的安装方法可能不

使用AndroidStudio上传忽略文件至SVN Server的解决办法

在同组项目进行共享时,容易把本地的配置文件比如*.iml等文件上传至共享服务器,这样会对队友造成巨大的麻烦,为了解决这个问题,可以使用下面方法解决,下面以上传到服务器的app.iml文件为例. 一.在AS的Setting中取消忽略文件后缀".iml": 二.在Windows目录中找到当前项目下的"app.iml"文件,右键该文件,选中TortoiseSVN,如下图2位置: 图2 在该项下选择Delete,删除该文件,如下图3所示: 图3 三.删除该文件后,在当前目录

ASP包含文件方法详解

详解 ASP包含文件方法详解 SSI 指令为用户提供在 Web 服务器处理之前将一个文件的内容插入到另一个文件的方法.ASP 只使用这一机制的 #include 指令.要在 .asp 文件中插入一个文件,使用下面的语法: <!--#include virtual | file ="filename"--> virtual 和 file 关键字指示用来包含该文件的路径的类型,filename 是您想包含的文件的路径和名称. 被包含文件不要求专门的文件扩展名:但是,为被包含文件

win8用蓝牙连接手机传输文件方法

  win8用蓝牙连接手机传输文件方法 电脑蓝牙连接手机 1.蓝牙是咱们手机上常用的功能,在微信等聊天工具出来之前,貌似有那么一段时间都是在用蓝牙进行交流,还记得一只老母猪的故事么?言归正传,在没有手机数据线以及不能上网的情况下,就需要用到蓝牙来进行文件传输了.在Windows8桌面右下角图片大家会看到蓝牙的标志,应该是这几年新出的笔记本电脑才用有的功能吧. 2.找到蓝牙图标之后,右击蓝牙图标,选择添加Bluetooth设备,进行蓝牙设备的添加. 3.如果在这里找不到蓝牙标志,那可以去系统设置中