V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
bs10081
V2EX  ›  分享创造

Microsoft Word 本地版本控制?試試 Git + Pandoc

  •  
  •   bs10081 ·
    bs10081 · 2023-07-16 21:14:32 +08:00 · 2310 次点击
    这是一个创建于 487 天前的主题,其中的信息可能已经有所发展或是发生改变。

    前言

    Word 作為 Office 三件套中,最滲透日常生活的軟體,你能想象,2023 年,本地依舊沒有自動存檔,也沒有版本管理,需要這些功能,都被強制綁定在 OneDrive 上,但是 OneDrive 的軟體品質又不如意,且對於有 NAS 的人來說,性價比不高,那有沒有什麼第三方解決方案,能幫 Microsoft 擦屁股的呢?

    介紹

    什麼是版本控制?

    版本控制是一種追蹤和管理檔案變更的系統。它可以幫助您追蹤檔案的變更,恢復到以前的版本,並與其他人協作編寫檔案。

    版本控制系統有兩種主要類型:集中式和分散式。集中式版本控制系統將所有檔案存儲在中央伺服器上。分散式版本控制系統將檔案存儲在所有參與者的工作電腦上。

    Git

    Git 是一種分散式版本控制系統,它是目前最受歡迎的版本控制系統之一。Git 易於使用,並且可用於各種專案。

    以下是使用版本控制的一些好處:

    • 追蹤檔案變更:版本控制可以幫助您追蹤檔案的變更,這對於回滾到以前的版本或查看更改歷史記錄很有用。
    • 恢復到以前的版本:如果您不小心刪除或更改了檔案,您可以使用版本控制來恢復到以前的版本。
    • 與其他人協作:版本控制可以幫助您與其他人協作編寫檔案。每個人都可以在自己的工作副本上進行更改,然後將更改合並到主分支。

    Pandoc

    Pandoc 是一個自由軟體,可將文字轉換成多種格式,包括 HTML 、PDF 、LaTeX 、EPUB 、Docx 等。它由 John MacFarlane 開發,可在 Windows 、Mac 和 Linux 上運行。Pandoc 是學術界和技術界廣泛使用的工具,可用於撰寫和格式化文檔、生成簡報、創建電子書等。

    Power by Google Bard

    實現邏輯

    Git 當初被設計的初衷是對原始碼進行版本控制,純文本的內容支持非常的好,但是 Docx 這種二進制格式,就無法在 Git 中產生文字級的修改記錄,雖然還是能用,但是版本控制沒辦法預覽,那和我直接在名稱上進行 v2 v3 的命名就沒有任何區別了。

    所以我們通過 Pandoc 來將 Docx 轉換成 Markdown ,並且使用 git diff 來讓 Markdown 代替 Docx 呈現文字級的預覽版本差異比較。

    操作步驟

    1. 安裝 Git 和 Pandoc
    2. 設定 Git
    3. 編輯 Word
    4. Git Commit

    安裝 Git 和 Pandoc

    1. 前往 Git 官網,下載並安裝相應操作系統版本的 Git 。
    2. 前往 Pandoc 官網,下載並安裝相應系統版本的 Pandoc 。

    macOS 建議使用 Homebrew 安裝 Git 和 Pandoc: brew install git pandoc

    設定 Git

    1. User 目錄底下,打開 .gitconfig 檔案,在最後面添加以下內容:
    [diff "pandoc"]
            textconv=pandoc --to=markdown
            prompt = false[alias]
            wdiff = diff --word-diff=color --unified=1
    

    1. 在我們要做版本管理的 Word 資料夾中,初始化 Git:git init

    1. 新增 .gitattributes ,添加一下內容:
    *.docx diff=pandoc
    

    CleanShot 2023-07-14 at 09.13.43@2x

    編輯 Word

    CleanShot 2023-07-14 at 09.32.09@2x

    這裡將示範文件,刪除中英文摘要中的英文摘要,然後保存檔案。

    Git Commit

    1. 通過 git diff {檔名}.docx 便能將 Docx 的格式處理成 Markdown

    CleanShot 2023-07-16 at 00.03.57@2x

    1. Github Desktop 等 Git GUI App 中,便能清楚地看到,這份 Docx 檔案,改動了那些內容

    CleanShot 2023-07-14 at 09.33.35@2x

    然後便能通過 Git commit 等指令來做版本管理了,更多的 Git 進階操作,可以到 Git 官網 來學習。


    感謝 https://cdn.ipfsscan.io/ 提供 IPFS 圖床。

    去中心化 xLog 原文鏈接: https://regchien.info/Microsoft-Word-ben-di-ban-ben-kong-zhi--shi-shi-Git--Pandoc

    12 条回复    2024-02-27 09:42:17 +08:00
    Worldispow
        1
    Worldispow  
       2023-07-16 22:13:21 +08:00 via Android
    在 onedrive 面前就是玩具。简单说下 onedrive 。
    1 、可以记录 word 、excel 、ppt 等格式的历史版本。
    2 、大多数文字工作者,每年需要记录的文档至少 10g 起步
    3 、平常一个方案或者标书,大概 50-500 页。
    4 、有时候改的不是文字,而是格式。
    bs10081
        2
    bs10081  
    OP
       2023-07-16 22:29:17 +08:00
    @Worldispow 嗯哼,OneDrive 對於專業文字工作者來說,有必要性,但是我只是輕量化使用,不想為了他單獨用 OneDrive 保存,所以採用 Git 的方式來做版本管理,畢竟大部分時間,文字內容都是用 Markdown 保存。
    MeMoDiv
        3
    MeMoDiv  
       2023-07-17 02:43:05 +08:00
    @Worldispow #1 同意,就第 4 点已经让 Word 和 Git 水火不容了。。如果我要写的东西是可以忽略排版和格式、只注重文字本身的内容,我压根就不会用 Word 。工具和需求严重不匹配,有种核动力奥迪双钻的沉重感。( op 这个方案的 Git 部分没啥可说的,比较标准的用法之一,Word+Pandoc 的这部分替换成 typora 甚至 VS Code 可能都要好很多)
    bs10081
        4
    bs10081  
    OP
       2023-07-17 10:14:47 +08:00
    @MeMoDiv 改格式一樣可以記錄的呀,一樣會顯示的 QAQ
    lixile
        5
    lixile  
       2023-07-17 11:04:34 +08:00
    适合个人 所以公司到底是怎么管理文档版本的 包括格式之类的
    下面我想到的 更适用的方案(或者可行的方案)是
    1 、调整好一个标准模板的.docx
    2 、文档开发人员编写 MD
    3 、全部都上仓,通过 pandoc 根据 模板.docx 生成 最终需要的 docx
    这样实现了文档标准化+CI 每次发版自动生成文档
    clemente0731
        6
    clemente0731  
       2023-07-17 13:52:03 +08:00
    @Worldispow 和坚果云比呢
    bs10081
        7
    bs10081  
    OP
       2023-07-17 14:55:19 +08:00
    @lixile 有更好的商用解決方案,https://simuldocs.com ,唯一缺點就是貴
    bs10081
        8
    bs10081  
    OP
       2023-07-17 14:56:07 +08:00
    @lixile 但是對於平常會寫 Markdown 的人,應該是不需要最終生成 docx 吧,直接像 LaTex 那樣,生成 PDF 就好了?
    lixile
        9
    lixile  
       2023-07-17 15:58:02 +08:00
    @bs10081 pdf 确实是最终产物 实际上 docx 模板 是为了排版符合某种特定格式或者要求,然后转换 pdf ,归根结底是要解决文档版本化和对应 pdf 自动生成的问题
    jy28520
        10
    jy28520  
       2023-07-18 09:53:29 +08:00
    @lixile 我司内部就有这样的一个脚本,然后发现表格嵌入之后的样式那真是一个非常痛苦的故事。。。
    lixile
        11
    lixile  
       2023-07-18 10:06:26 +08:00
    @jy28520 所以 我很好奇大公司们到底怎么管理文档版本 以及和对应代码仓版本关联
    hj18
        12
    hj18  
       262 天前   ❤️ 1
    很棒的教程,解决我的实际问题,非常感谢。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5830 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 02:43 · PVG 10:43 · LAX 18:43 · JFK 21:43
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.