git 操作二进制文件
平常用git進行項目管理已經稀松平常了, 今天咱來點不一樣的.
平常管理的都是普通的文本文件, 如果是二進制文件, git能夠處理么? 比如word文檔. 測試一下.
新建一個項目, 在其中創建test1.docx, test2.txt兩個空文件并提交. 之后編輯文件并添加標題, git diff看一下效果:
效果很明顯, 文本文檔能夠清除的看到變動, 而二進制文件只能看到. 這對于需要對這種二進制文件進行版本管理的需求來說, 有些不盡人意. 如此, 這版本管理有和沒有也沒什么兩樣, 你也不知道在那次修改了哪些內容.
那么有沒有辦法能夠讓git對word文檔進行識別呢? 有的, 這需要借助第三方工具來幫助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 文件來嘗試識別編碼.
此屬性甚至可以實現文件編碼的批量修改, 操作步驟如下:
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 操作二进制文件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java set循环取值_java循环遍
- 下一篇: 如何将数字转换成口语中的文本串