1. 程式人生 > >git 對 Microsoft Word 進行版本控制

git 對 Microsoft Word 進行版本控制

dcl code 版本控制系統 documents custom ec2 adobe pen you

  昨天中國高校發生了一件駭人聽聞的事情,聽說不少高校的校園網用戶連接校園網被勒索病毒給黑了,重要文件全部被加密,必須要支付贖金才能解密,具體新聞可以參見:http://www.sohu.com/a/140236495_346360。而且還有不少是和我一樣的大四畢業狗,聽說因為畢業論文沒有備份,結果被黑了,然後,然後就沒有然後了。。。真的是欲哭無淚啊。看到這個消息,我想起來我的沒寫完的畢業論文好像也沒備份,嚇得我趕緊去把論文備份到onedrive上面去了。據說微軟之前已經打過補丁了,只是我國廣大使用盜版windows的用戶(包括我~-~)相當一部分都沒有自動更新打補丁的習慣,像我之前就特別討厭windows的自動更新,感覺浪費時間,現在才知道那真的不是沒有用啊!還好win10是強制自動更新的。看來以後我得養成經常備份重要文件的習慣了,不然哪天電腦也被黑了,文件丟了,真的是欲哭無淚了。

  說到文件備份,我們一般想到的當然就是什麽雲盤之類的啦,比如百度雲,騰訊的微雲之類的,當然對於office 文檔而言,onedrive

本身就是一個很棒的備份工具。但是這些操作都有些太麻煩了,而且如果文件需要頻繁的修改,就得不停地上傳,下載,實在是太麻煩了。要是有一個能方便控制版本的工具就好了。說到版本控制,寫代碼的都知道有大名鼎鼎的git啊!誒,對了,能不能用git 對 word文檔進行版本控制呢?我突然想到這裏,就用google 搜了一下,發現還真的可以。下面我就給大家介紹怎麽做。

  http://blog.martinfenner.org/2014/08/25/using-microsoft-word-with-git/ 這篇文章對用git 進行word版本控制講的比較清楚,但是有些細節遺漏了。於是我又去github上面找了一個:https://github.com/vigente/gerardus/wiki/Integrate-git-diffs-with-word-docx-files 這裏就講的非常清楚了。

  首先,簡單介紹一下git。維基百科上是這麽介紹git的:

git(/ɡ?t/[5], 音頻(幫助·信息))是一個分布式版本控制軟件,最初由林納斯·托瓦茲(Linus Torvalds)創作,於2005年以GPL發布。最初目的是為更好地管理Linux內核開發而設計。應註意的是,這與GNU Interactive Tools[6](一個類似Norton Commander界面的文件管理器)有所不同。

git最初的開發動力來自於BitKeeper和Monotone[7][8]。git最初只是作為一個可以被其他前端(比如Cogito或Stgit[9])包裝的後端而開發的,但後來git內核已經成熟到可以獨立地用作版本控制[10]

。很多著名的軟件都使用git進行版本控制[11],其中包括Linux內核、X.Org服務器和OLPC內核等項目的開發流程[12]

簡單來說就是一個分布式版本控制系統,著名的github網站就是建立在git的基礎上的。如果你還不會使用git,請去google 相應的教程(其實官網文檔就挺好),簡單上手使用估計半個小時就可以了。

git 一般只能對純文本文件進行版本控制,但是如果有其他中間轉化軟件的協助,就可以對任意二進制文件進行版本控制了。word 的.doc 或者 .docx 就不是一個純文本文件,所以需要第三方轉化工具,將其轉化為 純文本。這裏的工具就是 pandoc。pandoc is

a universal document converter。即是一個通用的文檔轉換器。

If you need to convert files from one markup format into another, pandoc is your swiss-army knife. Pandoc can convert documents in markdown, reStructuredText, textile, HTML, DocBook, LaTeX, MediaWiki markup, TWiki markup, OPML, Emacs Org-Mode, Txt2Tags, Microsoft Word docx, LibreOffice ODT, EPUB, or Haddock markup to

  • HTML formats: XHTML, HTML5, and HTML slide shows using Slidy, reveal.js, Slideous, S5, or DZSlides.
  • Word processor formats: Microsoft Word docx, OpenOffice/LibreOffice ODT, OpenDocument XML
  • Ebooks: EPUB version 2 or 3, FictionBook2
  • Documentation formats: DocBook, TEI Simple, GNU TexInfo, Groff man pages, Haddock markup
  • Page layout formats: InDesign ICML
  • Outline formats: OPML
  • TeX formats: LaTeX, ConTeXt, LaTeX Beamer slides
  • PDF via LaTeX
  • Lightweight markup formats: Markdown (including CommonMark), reStructuredText, AsciiDoc, MediaWiki markup, DokuWiki markup, Emacs Org-Mode, Textile
  • Custom formats: custom writers can be written in lua.

  看到上面這麽多眼花繚亂的格式,就知道 pandoc有多牛逼了。當然我們這裏只需要將其轉化為markdown 格式。下面開始說 git 對word 進行版本控制的 步驟:

1. Install pandoc. 去http://pandoc.org/installing.html 找到合適的pandoc下載文件,然後下載安裝。

2. install git

3. 如果是在 unix(linux/macosx)系統下,編輯 ~/.gitconfig 文件,如果是在windows系統下,編輯 git 安裝目錄下的 /mingw64/etc/gitconfig 文件,加上這麽一段話:

[diff "pandoc"]
  textconv=pandoc --to=markdown
  prompt = false
[alias]
  wdiff = diff --word-diff=color --unified=1

然後在你的工程目錄下新建一個 .gitattributes(linux/mac)文件(windows是gitattributes 文件),然後寫入:
*.docx diff=pandoc

當然上面的是docx文件,如果是doc文件,把docx換成doc應該也是一樣的。

然後 在工程目錄下初始化git(git init)
git add . 即把所有的文件都添加進去(包括.gitattributes文件)
其他的 git commit -m git remote add origin git push origin master 等都是一樣的。

現在如果想要看本次修改之後與上次commit 之間的差別,可以使用命令(file.docx是你的word文件名):
git wdiff file.docx
這個命令會將本次修改的與上次不同的地方用彩色標識出來。

如果想查看 歷次的改變(all changes),可以使用命令:
git log -p --word-diff=color file.docx

4. 使用pandoc。對於你想要git 控制版本的文檔file.docx 在命令行(windows)或者unix下的shell,輸入命令:

pandoc -s file.docx -t markdown -o file.md這個命令將你的.docx 文檔轉化為 .md markdown 格式。然後再 git add file.docx file.md (或者 git add .),git commit即可。

還是看我自己的一個實際的小例子吧。我在project 目錄下有 一個名為 How_to_live_your_college_life.docx 的文檔,在使用pandoc 轉化為markdown之後,我 一次push,commit
然後我把標題改了一下,保存。在git bash 下,輸入:git wdiff How_to_live_your_college_life.docx 得到結果如下圖1所示:

技術分享


                            圖1
圖1中綠色紅筆圈出來的部分就是我上一次修改的內容。
再執行git log -p --word-diff=color How_to_live_your_college_life.docx 命令,就會把歷次修改的部分用綠色標註出來,如圖2所示(部分):

技術分享


                            圖2
哈哈,就是這麽簡單,幾行命令就搞定啦。大家快過來試試吧!

git 對 Microsoft Word 進行版本控制