前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >git 操作二进制文件

git 操作二进制文件

作者头像
烟草的香味
发布2021-06-29 15:25:44
1.2K0
发布2021-06-29 15:25:44
举报
文章被收录于专栏:烟草的香味烟草的香味

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

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

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

image-20210603222409788

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

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

配置文件解析工具

1.安装解析工具docx2txt

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

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

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

image-20210603222925336

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

2.给git配置解析工具

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

代码语言:javascript
复制
#!/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文件. 添加以下内容:

代码语言:javascript
复制
*.docx diff=word

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

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

image-20210603224626244

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

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

gitattributes 文件其他用途

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

设置的格式为:

代码语言:javascript
复制
*.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, 等等, 都有详细的文档. 问一美中不足的, 就是文档时全英文的, 对于我这种英文水平有限的人来说, 阅读还有有点费劲...

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-06-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 烟草的香味 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 配置文件解析工具
  • gitattributes 文件其他用途
相关产品与服务
项目管理
CODING 项目管理(CODING Project Management,CODING-PM)工具包含迭代管理、需求管理、任务管理、缺陷管理、文件/wiki 等功能,适用于研发团队进行项目管理或敏捷开发实践。结合敏捷研发理念,帮助您对产品进行迭代规划,让每个迭代中的需求、任务、缺陷无障碍沟通流转, 让项目开发过程风险可控,达到可持续性快速迭代。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档