日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

git 操作二进制文件

發(fā)布時(shí)間:2024/8/23 编程问答 51 豆豆
生活随笔 收集整理的這篇文章主要介紹了 git 操作二进制文件 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

平常用git進(jìn)行項(xiàng)目管理已經(jīng)稀松平常了, 今天咱來點(diǎn)不一樣的.

平常管理的都是普通的文本文件, 如果是二進(jìn)制文件, git能夠處理么? 比如word文檔. 測試一下.

新建一個(gè)項(xiàng)目, 在其中創(chuàng)建test1.docx, test2.txt兩個(gè)空文件并提交. 之后編輯文件并添加標(biāo)題, git diff看一下效果:

效果很明顯, 文本文檔能夠清除的看到變動, 而二進(jìn)制文件只能看到. 這對于需要對這種二進(jìn)制文件進(jìn)行版本管理的需求來說, 有些不盡人意. 如此, 這版本管理有和沒有也沒什么兩樣, 你也不知道在那次修改了哪些內(nèi)容.

那么有沒有辦法能夠讓git對word文檔進(jìn)行識別呢? 有的, 這需要借助第三方工具來幫助git對文件進(jìn)行解析.

配置文件解析工具

1.安裝解析工具docx2txt

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

安裝過程很簡單, 其中的 INSTALL文件有教, mac 用戶直接執(zhí)行make即可, make后默認(rèn)安裝在了/usr/local/bin路徑下.

下載來試一下這個(gè)工具吧: docx2txt.pl test1.docx

漂亮, 成功識別出了其中的文本信息. 接下來就是告訴git怎么 使用它了.

2.給git配置解析工具

首先, 要有一個(gè)供git調(diào)用的命令, 姑且就叫g(shù)it_docx2txt, 那么這個(gè)命令從那來呢? 建, 在可執(zhí)行路徑下創(chuàng)建git_docx2txt文件, 我就是在/usr/local/bin目錄下創(chuàng)建的. 通過此命令進(jìn)行轉(zhuǎn)換 , 其內(nèi)容為:

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

創(chuàng)建完不要忘記給文件添加可執(zhí)行權(quán)限. chmod a+x git_docx2txt

現(xiàn)在, 解析工具已經(jīng)有了, 接著就是把這個(gè)工具告訴 git就好啦.

git config --local diff.word.textconv git_docx2txt

上面命令告訴git, 有一個(gè)叫做word的文本解析器, 使用的命令是git_docx2txt. 我這里因?yàn)槭菧y試需要, 就配到了項(xiàng)目下. 如果有需要也可以做全局配置哦.

好, 現(xiàn)在git已經(jīng)知道這個(gè)解析器了, 但是還需要告訴它哪些文件要使用這個(gè)工具進(jìn)行解析.

此時(shí)用到了一個(gè)文件: .gitattributes, 用于項(xiàng)目的屬性配置, 當(dāng)然, 如果不想提上去的話, 也可以修改.git/info/attributes文件. 添加以下內(nèi)容:

*.docx diff=word

此文件告訴git, 所有.docx結(jié)尾的文件, 使用word工具進(jìn)行diff.

好, 大功告成, 重新看一下diff的結(jié)果:

不過能夠看得出來, 其只能比較文字內(nèi)容的差異, 而拿不到格式的差異.

當(dāng)然, 既然是命令, 也就是說, 能夠?qū)⑽募D(zhuǎn)換成文本的, 都可以被git引用進(jìn)來進(jìn)行差異比較. 比如使用·exiftool·比較圖片的差異, 包括大小、寬高等

gitattributes 文件其他用途

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

設(shè)置的格式為:

*.txt 屬性1 屬性2

具體文檔可通過命令: man gitattributes 查看.

每個(gè)屬性有如下狀態(tài), 以text舉例:

  • text : 既默認(rèn)值為 true
  • -text: false
  • text=string : 指定一個(gè)值
  • 未聲明

text

啟用行尾換行符的轉(zhuǎn)換. (因?yàn)樵?windows 和 linux 中, 換行符表示不同, 所以需要進(jìn)行轉(zhuǎn)換才能正確顯示, 大概只在 windows 下開發(fā)用的到吧)

  • true: 標(biāo)記為文本文件, 并進(jìn)行換行符轉(zhuǎn)換
  • false: 標(biāo)記為非文本文件, 不進(jìn)行換行符的轉(zhuǎn)換
  • auto: 自動識別
  • 未聲明: 使用core.autocrlf屬性

eol

設(shè)置行尾的換行符規(guī)則. 不在 Windows 下開發(fā)估計(jì)也用不到了.

  • crlf
  • lf

working-tree-encoding

如果你的文件不是使用 utf8編碼, 則 git 無法識別, 此屬性告訴git應(yīng)該使用什么編碼來讀取文件.

git會將文件按照指定編碼識別, 并使用utf8保存在git歷史中, 當(dāng)檢出時(shí), 輸出為指定編碼的文件.

對了, 可以通過iconv --list命令開查看你當(dāng)前支持的所有編碼. 同時(shí), 如果你不知道文件的編碼, 可以通過命令: file a.txt 文件來嘗試識別編碼.

此屬性甚至可以實(shí)現(xiàn)文件編碼的批量修改, 操作步驟如下:

  • 在一個(gè)有文件a.txt的分支A 上, 將其提上去
  • 切換到一個(gè)沒有a.txt文件的分支B
  • 修改.git/info/attributes文件中a.txt的編碼
  • 此時(shí)再切換到分支 A
  • git在對文件進(jìn)行重寫時(shí), 會進(jìn)行編碼的轉(zhuǎn)換. 此時(shí)文件a.txt的編碼已經(jīng)改變了
  • diff

    diff屬性在之前處理word文檔的時(shí)候就已經(jīng)用過了.

    • diff : 聲明為文本格式
    • -diff : 聲明為二進(jìn)制
    • diff=test : 指定應(yīng)用程序

    指定的diff模式, 定義在: .git/config 或 ~/.gitconfig 文件中. 它不光可以通過命令來做二進(jìn)制文件的轉(zhuǎn)換, 還可以添加自定義單詞差異等, 不過我試了一下內(nèi)置的PHP, 沒看出有什么差別…

    其他

    還支持一些其他屬性, 如: merge, filter, whitespace, conflict-marker-size 等等. 就不一一列出了, 感興趣的可以通過 man gitattributes查看文檔.

    git的文檔寫的還是挺詳細(xì)的, man git, man git-add, 等等, 都有詳細(xì)的文檔. 問一美中不足的, 就是文檔時(shí)全英文的, 對于我這種英文水平有限的人來說, 閱讀還有有點(diǎn)費(fèi)盡…

    總結(jié)

    以上是生活随笔為你收集整理的git 操作二进制文件的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。