平常用git进行项目管理已经稀松平常了, 今天咱来点不一样的.

平常管理的都是普通的文本文件, 如果是二进制文件, git能够处理么? 比如word文档. 测试一下.

新建一个项目, 在其中创建test1.docx, test2.txt两个空文件并提交. 之后编辑文件并添加标题, git diff看一下效果:

效果很明显, 文本文档能够清除的看到变动, 而二进制文件只能看到. 这对于需要对这种二进制文件进行版本管理的需求来说, 有些不尽人意. 如此, 这版本管理有和没有也没什么两样, 你也不知道在那次修改了哪些内容.

那么有没有办法能够让gitword文档进行识别呢? 有的, 这需要借助第三方工具来帮助git对文件进行解析.

配置文件解析工具

1.安装解析工具docx2txt

地址: https://sourceforge.net/projects/docx2txt

安装过程很简单, 其中的 INSTALL文件有教, mac 用户直接执行make即可, make后默认安装在了/usr/local/bin路径下.

下载来试一下这个工具吧: docx2txt.pl test1.docx

漂亮, 成功识别出了其中的文本信息. 接下来就是告诉git怎么 使用它了.

2.给git配置解析工具

首先, 要有一个供git调用的命令, 姑且就叫git_docx2txt, 那么这个命令从那来呢? 建, 在可执行路径下创建git_docx2txt文件, 我就是在/usr/local/bin目录下创建的. 通过此命令进行转换 , 其内容为:

#!/bin/bash
docx2txt.pl "$1" -

创建完不要忘记给文件添加可执行权限. chmod a+x git_docx2txt

现在, 解析工具已经有了, 接着就是把这个工具告诉 git就好啦.

git config --local diff.word.textconv git_docx2txt

上面命令告诉git, 有一个叫做word的文本解析器, 使用的命令是git_docx2txt. 我这里因为是测试需要, 就配到了项目下. 如果有需要也可以做全局配置哦.

好, 现在git已经知道这个解析器了, 但是还需要告诉它哪些文件要使用这个工具进行解析.

此时用到了一个文件: .gitattributes, 用于项目的属性配置, 当然, 如果不想提上去的话, 也可以修改.git/info/attributes文件. 添加以下内容:

*.docx diff=word

此文件告诉git, 所有.docx结尾的文件, 使用word工具进行diff.

好, 大功告成, 重新看一下diff的结果:

不过能够看得出来, 其只能比较文字内容的差异, 而拿不到格式的差异.

当然, 既然是命令, 也就是说, 能够将文件转换成文本的, 都可以被git引用进来进行差异比较. 比如使用·exiftool·比较图片的差异, 包括大小、宽高等

gitattributes 文件其他用途

既然用到.gitattributes文件了, 就顺便也来看看他的其他作用吧.

设置的格式为:

*.txt 属性1 属性2

具体文档可通过命令: man gitattributes 查看.

每个属性有如下状态, 以text举例:

  • text : 既默认值为 true
  • -text: false
  • text=string : 指定一个值
  • 未声明

text

启用行尾换行符的转换. (因为在 windows 和 linux 中, 换行符表示不同, 所以需要进行转换才能正确显示, 大概只在 windows 下开发用的到吧)

  • true: 标记为文本文件, 并进行换行符转换
  • false: 标记为非文本文件, 不进行换行符的转换
  • auto: 自动识别
  • 未声明: 使用core.autocrlf属性

eol

设置行尾的换行符规则. 不在 Windows 下开发估计也用不到了.

  • crlf
  • lf

working-tree-encoding

如果你的文件不是使用 utf8编码, 则 git 无法识别, 此属性告诉git应该使用什么编码来读取文件.

git会将文件按照指定编码识别, 并使用utf8保存在git历史中, 当检出时, 输出为指定编码的文件.

对了, 可以通过iconv --list命令开查看你当前支持的所有编码. 同时, 如果你不知道文件的编码, 可以通过命令: file a.txt 文件来尝试识别编码.

此属性甚至可以实现文件编码的批量修改, 操作步骤如下:

  1. 在一个有文件a.txt的分支A 上, 将其提上去
  2. 切换到一个没有a.txt文件的分支B
  3. 修改.git/info/attributes文件中a.txt的编码
  4. 此时再切换到分支 A
  5. git在对文件进行重写时, 会进行编码的转换. 此时文件a.txt的编码已经改变了

diff

diff属性在之前处理word文档的时候就已经用过了.

  • diff : 声明为文本格式
  • -diff : 声明为二进制
  • diff=test : 指定应用程序

指定的diff模式, 定义在: .git/config~/.gitconfig 文件中. 它不光可以通过命令来做二进制文件的转换, 还可以添加自定义单词差异等, 不过我试了一下内置的PHP, 没看出有什么差别…

其他

还支持一些其他属性, 如: merge, filter, whitespace, conflict-marker-size 等等. 就不一一列出了, 感兴趣的可以通过 man gitattributes查看文档.

git的文档写的还是挺详细的, man git, man git-add, 等等, 都有详细的文档. 问一美中不足的, 就是文档时全英文的, 对于我这种英文水平有限的人来说, 阅读还有有点费尽…

git 操作二进制文件相关推荐

  1. git操作手册_基本的Git手册

    git操作手册 介绍 (Introduction) Hi! I am Sanjula, and in this guide I hope to teach you a little bit about ...

  2. 手把手教你熟悉Git操作

    文章目录 Git 一.版本控制 二.Windows安装Git 1. Git 安装 2. Git 一次性配置 三.理解Git文件的三种状态与工作模式 四.创建版本库并提交文件 1. 初始化git 2. ...

  3. GitHub防黑客新措施:弃用账密验证Git操作,改用token或SSH密钥,今晚0点执行

    萧箫 发自 凹非寺 量子位 报道 | 公众号 QbitAI 还在用账户+密码对GitHub上的Git操作进行身份验证? 赶紧整个token(令牌)或SSH密钥吧! 8月14号0点(8月13日9:00 ...

  4. Git操作手册|命令速查表

    Git操作手册|命令速查表 这篇文章主要介绍Git分布式版本管理与集中式管理的一些差异,总结下Git常用命令作为日后的速查表,最后介绍Git进阶的一些案例. 本文分为以下几个部分: Git与SVN差异 ...

  5. 【Tools】git操作总结

    git操作总结 下载的工程带有子工程submodule: 当使用git clone下来的工程中带有submodule时,初始的时候,submodule的内容并不会自动下载下来的,此时,只需执行如下命令 ...

  6. YTU 2924: 文件操作--二进制文件读入

    2924: 文件操作--二进制文件读入 时间限制: 1 Sec  内存限制: 128 MB 提交: 58  解决: 20 题目描述 现有100名学生的姓名(name).学号(num).英语(Engli ...

  7. Git操作常用的命令都在这里了

    转载自 Git操作常用的命令都在这里了 创建仓库 git init 在当前目录执行,会生成 .git目录文件,这个和SVN一致. 提交到仓库 git commit -m "first com ...

  8. git 修改分支名字_基础Git操作与GitHub协作吐血整理,收好!| 原力计划

    作者 | 光子俊来源 | CSDN博客出品 | CSDN(ID:CSDNnews) Git介绍 Git是目前世界上最先进的分布式版本控制系统,可以为我们管理项目.构建工程.多人协作提供便利,作为一个爱 ...

  9. Git操作失败并提示Another git process seems to be running in this......

    问题: Git操作的过程中突然显示Another git process semms to be running in this repository, e.g. an editor opened b ...

最新文章

  1. 简单免费工具实现手机端信息统计
  2. VMware vMotion 配置要求
  3. ADO.NET的数据库查询2009-12-07 02:20 P.M.ADO.NET的数据库查询
  4. php5.4curl报错,PHP中使用CURL报错解决方案 rip curl php curl开启 curl下
  5. 03 jquery easyui 之 easyLoader 加载器
  6. linux 对象管理器,Linux多安全策略和动态安全策略框架模块详细分析之函数实现机制中文件对象管理器分析(3)...
  7. hazelcast 使用_使用HazelCast进行Hibernate缓存:JPA缓存基础知识
  8. python做自动化控制postman_使用postman+newman+python做接口自动化测试
  9. VS2015无法打开包括文件corecrt.h 无法打开文件ucrtd.lib
  10. 4am永远 鼠标按键设置_4AM称霸PCL和PEL 绝地求生与和平精英的双端冠军 | 电玩巴士...
  11. 你经常使用计算机吗这样的问题其主要缺点是,2015年10月自考02326操作系统模拟试题及答案3...
  12. bzoj2822 [AHOI2012]树屋阶梯 dp
  13. 双亲委派机制_史上三次破坏ClassLoader双亲委派机制
  14. SpringMVC_02
  15. 谷歌和GitHub 联手提出新方法,提振软件供应链安全
  16. 2022年IT热门能力
  17. .html页面缓存问题
  18. ArcGIS地理配准(Georeferencing)详解
  19. Javascrpt测试
  20. 【最大流,最大匹配,最大独立集】2018.6.18 【2018提高组】模拟C组 T3 沙耶的玩偶

热门文章

  1. 禁售苹果手机_苹果、华为供应商工厂突发火灾!浓烟冲天
  2. Linux基本目录结构
  3. 计算机操作系统超全详解
  4. 一部分 数据 迁移_从虚机到容器,知名架构师告诉你如何平滑进行业务迁移
  5. mysql 货币显示_在MySQL中以正确的格式显示USD货币记录
  6. Java大牛分享的面试知识点
  7. css鼠标变成小手_技巧篇:CSS高级技巧详解
  8. ibm笔记本电脑电池_笔记本电池怎么充电 笔记本电脑电池充电方法【详解】
  9. 【LeetCode笔记】31. 下一个排列(Java、原地算法、偏数学)
  10. c语言 算术平均滤波法_单片机数字滤波的算法