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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

git 操作二进制文件

發布時間:2024/8/23 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 文件來嘗試識別編碼.

此屬性甚至可以實現文件編碼的批量修改, 操作步驟如下:

  • 在一個有文件a.txt的分支A 上, 將其提上去
  • 切換到一個沒有a.txt文件的分支B
  • 修改.git/info/attributes文件中a.txt的編碼
  • 此時再切換到分支 A
  • 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 操作二进制文件的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。