Можно ли различить PowerPoint, управляемый версией, с помощью git?

У меня есть некоторые документы PowerPoint, которые я поддерживаю с помощью git. Я хочу знать, какие различия существуют между версиями файла. Текст является наиболее важным, изображения и форматирование не так много (по крайней мере, на данный момент).

5 ответов

Решение

Я написал это для использования с git в командной строке (требуется Python и библиотека python-pptx):

"""
Setup -- Add these lines to the following files:
--- .gitattributes
*.pptx diff=pptx

--- .gitconfig (or repo\.git\config    or your_user_home\.gitconfig) (change the path to point to your local copy of the script)
[diff "pptx"]
    binary = true
    textconv = python C:/Python27/Scripts/git-pptx-textconv.py

usage:
git diff your_powerpoint.pptx


Thanks to the  python-pptx docs and this snippet:
http://python-pptx.readthedocs.org/en/latest/user/quickstart.html#extract-all-text-from-slides-in-presentation
"""

import sys
from pptx import Presentation


if __name__ == '__main__':
    if len(sys.argv) != 2:
        print "Usage: git-pptx-textconv file.xslx"

    path_to_presentation = sys.argv[1]

    prs = Presentation(path_to_presentation)

    for slide in prs.slides:
        for shape in slide.shapes:
            if not shape.has_text_frame:
                continue
            for paragraph in shape.text_frame.paragraphs:
                par_text = ''
                for run in paragraph.runs:
                    s = run.text
                    s = s.replace(r"\\", "\\\\")
                    s = s.replace(r"\n", " ")
                    s = s.replace(r"\r", " ")
                    s = s.replace(r"\t", " ")
                    s = s.rstrip('\r\n')

                    # Convert left and right-hand quotes from Unicode to ASCII
                    # found http://stackru.com/questions/816285/where-is-pythons-best-ascii-for-this-unicode-database
                    # go here if more power is needed  http://code.activestate.com/recipes/251871/
                    # or here                          https://pypi.python.org/pypi/Unidecode/0.04.1
                    punctuation = { 0x2018:0x27, 0x2019:0x27, 0x201C:0x22, 0x201D:0x22 }
                    s.translate(punctuation).encode('ascii', 'ignore')
                    s = s.encode('utf-8')
                    if s:
                        par_text += s
                print par_text

Мне не удалось установить python-pptx, как предполагает принятый ответ, поэтому я искал решение node.js (которое также может работать для нескольких других форматов файлов, с которыми он может работать).

Установите https://github.com/dbashford/textract (npm install --global textract).

Определите, как diff "textract" в вашем .git конфиге. Для моей машины с Windows,

[diff "textract"]
    binary = true
    textconv=textract.cmd

Определите в своем .gitattributes тот *.pptx файл должен использовать diff "textract"

*.pptx diff=textract

git diff счастливо.

На самом деле, нет. Файл PowerPoint - это, по сути, архив (zip) папки, полной файлов. Git будет обрабатывать его как двоичный файл (потому что он есть).

Может быть, есть стороннее расширение, чтобы сделать это, но я никогда не слышал об этом.

Я не могу говорить напрямую с git, так как мы используем Visual Studio + TFS на работе. Тем не менее, небольшое исследование показывает, что это должно работать. Что я делаю на VS, так это интегрирую WinMerge и его плагин, который поддерживает сравнение текста файлов MS Office и PDF. Это позволяет мне делать различия в файлах pptx, docx, pdf и т. Д., Опубликованных для контроля версий.

Для git это должно работать так:

1) Загрузите WinMerge с помощью плагина xdocdiff: http://freemind.s57.xrea.com/xdocdiffPlugin/en/index.html2) Интегрируйте WinMerge с помощью git: https://coderwall.com/p/76wmzq/winmerge-as-git-difftool-on-windows

Надеемся, что это позволит вам увидеть текстовые различия для вашего PowerPoint.

Новая альтернатива в этом пространстве. В настоящее время PowerPoint может выполнять Diff и Merge в Windows. Используйте ленту «Обзор», затем «Сравнить».

Я написал небольшую утилиту, которая может запускать PowerPoint в этом режиме сравнения. Он поддерживает 2-стороннее и 3-стороннее слияние.

      ppt-diffmerge-tool --local="$LOCAL" --remote="$REMOTE" --base="$BASE" --output="$RESULT" 

Видеть:

Другие вопросы по тегам