首页 分类 关于我
ruby
Nginx 配置示例 工程师的产品观 理理File/Dir/Pathname(一) TracePoint介绍 ruby中的return 如何动态改变某个class的祖先链 ObjectSpace介绍 Rails日志实现探索(3) Rails日志实现探索(2) Rails日志实现探索(1) Rails中的request rescue exception in ruby 设计模式之观察者模式 require 的故事 ruby中的编码 研究ruby的一些小技巧 Rails中间件 ruby对象的序列化 ActiveSupport宝藏之MessageVerifier 如何写rakefile Ruby on Rails 环境及准备 基于Rack的项目初始化
git
如何移除某次提交之前的版本历史 Git 不常用的好用的命令 Git高级技巧之忽略文件
database
Mysql数据库编码 从mongodb向mysql迁移数据
工具
搭建ipsec服务
linux
Linux 常用查看命令

Git高级技巧之忽略文件

Git高级技巧之忽略文件

前言

前段时间新参与公司的一个项目,由于服务器 ruby 版本管理用的是 rvm,我在本地用的是 rbenv,这两个 ruby 版本管理软件都用到了.ruby-version作为配置文件,但是语法不一样。 我的需求是在本地改动.ruby-version这个文件,但是让 git 忽略我在本地的改动。 首先我想到的是使用.gitignore配置文件,但是使用.gitignore会将.ruby-version这个文件删除,这显然不是我想要的结果。 那怎么解决这个问题呢?

git 忽略文件的两个类型

git 忽略文件的类型分为:临时忽略,永久忽略两个类型。.gitignore实际是属于永久忽略一个文件。

git 临时忽略文件

命令:git update-index --assume-unchanged <file>

我先在项目下运行 git status,结果是这样的:

On branch master
Your branch is up-to-date with 'origin/master'.

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

	modified:   .ruby-version

no changes added to commit (use "git add" and/or "git commit -a")

然后我运行命令:git update-index --assume-unchanged .ruby-version

改动果然被忽略了:

On branch master
Your branch is up-to-date with 'origin/master'.

nothing to commit, working directory clean

但是我还是有个疑问,我怎么知道我将哪些文件临时忽略了呢?

命令:git ls-files -v

结果如下:

...
H .gitignore
h .ruby-version
H 404.html
...

要知道git ls-files -v这个命令的结果含义,首先需要了解git ls-files -t,这个命令会列出各个文件的状态。

文件前面那个字母标志的含义如下:

  • H cached
  • S skip-worktree
  • M unmerged
  • R removed/deleted
  • C modified/changed
  • K to be killed
  • ? other

git ls-files -v是-t的升级版,对应小写字母则表示这个文件是否被临时忽略。

有结就有解,继续跟踪的命令是:git update-index --no-assume-unchanged <file>

永久忽略

永久忽略一般大家都知道,主要就是.gitignore的配置,这个配置分为三个级别:

项目中的.gitignore文件

这个是放在版本库里共享的;

项目中.git目录下地info/exclude文件

这个是本地针对该项目忽略的,比如我 ruby 的项目用的编辑器会生成一个.idea的文件夹,就在这里配置忽略;

全局配置

需要在.gitconfig文件中指定一个全局的配置文件路径,如:

[core]
	excludesfile = /Users/qin/.gitignore

比如 mac 电脑会生成一个.DS_Store的文件,就适合在这里配置,对所有项目生效。

© 2018 www.xinshengyin.com All rights reserved.

版权所有