是否可以用 git 区分 PowerPoint 版本控制?
Is it possible to diff PowerPoint version-controlled with git?
我有一些 PowerPoint 文档,我使用 git 进行版本控制。我想知道文件版本之间有什么区别。文本是最重要的,图像和格式不是那么重要(至少现在不是)。
不是真的。 PowerPoint 文件本质上是充满文件的文件夹的存档 (zip)。 Git 会将其视为二进制文件(因为它是)。
也许有第 3 方扩展可以做到这一点,但我从未听说过。
我写这个是为了在命令行上与 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
# 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
)。
在您的 .git config 中定义如何 diff "textract"
。对于我的 Windows 机器,
[diff "textract"]
binary = true
textconv=textract.cmd
在您的 .gitattributes
中定义 *.pptx
文件应该使用 diff "textract"
*.pptx diff=textract
git diff
开心
我不能直接与 git 交谈,因为我们在工作中使用 Visual Studio + TFS。然而,一些研究表明这应该有效。我在 VS 上做的是集成 WinMerge 及其支持 MS Office 和 PDF 文件文本比较的插件。这允许我对发布到版本控制的 pptx、docx、pdf 等文件进行比较。
对于git,它的工作方式应该是:
1) 使用 xdocdiff 插件获取 WinMerge:http://freemind.s57.xrea.com/xdocdiffPlugin/en/index.html
2) 将 WinMerge 与 git 集成:https://coderwall.com/p/76wmzq/winmerge-as-git-difftool-on-windows
希望这能让您看到 PowerPoint 的基于文本的差异。
此 space 中的新选择。如今,PowerPoint 可以在 Windows 中本地区分和合并。使用审阅功能区,然后比较。
我写了一个小实用程序,可以在这种比较模式下启动 PowerPoint。它支持2路和3路合并。
ppt-diffmerge-tool --local="$LOCAL" --remote="$REMOTE" --base="$BASE" --output="$RESULT"
参见:
我有一些 PowerPoint 文档,我使用 git 进行版本控制。我想知道文件版本之间有什么区别。文本是最重要的,图像和格式不是那么重要(至少现在不是)。
不是真的。 PowerPoint 文件本质上是充满文件的文件夹的存档 (zip)。 Git 会将其视为二进制文件(因为它是)。
也许有第 3 方扩展可以做到这一点,但我从未听说过。
我写这个是为了在命令行上与 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
# 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
)。
在您的 .git config 中定义如何 diff "textract"
。对于我的 Windows 机器,
[diff "textract"]
binary = true
textconv=textract.cmd
在您的 .gitattributes
中定义 *.pptx
文件应该使用 diff "textract"
*.pptx diff=textract
git diff
开心
我不能直接与 git 交谈,因为我们在工作中使用 Visual Studio + TFS。然而,一些研究表明这应该有效。我在 VS 上做的是集成 WinMerge 及其支持 MS Office 和 PDF 文件文本比较的插件。这允许我对发布到版本控制的 pptx、docx、pdf 等文件进行比较。
对于git,它的工作方式应该是:
1) 使用 xdocdiff 插件获取 WinMerge:http://freemind.s57.xrea.com/xdocdiffPlugin/en/index.html 2) 将 WinMerge 与 git 集成:https://coderwall.com/p/76wmzq/winmerge-as-git-difftool-on-windows
希望这能让您看到 PowerPoint 的基于文本的差异。
此 space 中的新选择。如今,PowerPoint 可以在 Windows 中本地区分和合并。使用审阅功能区,然后比较。
我写了一个小实用程序,可以在这种比较模式下启动 PowerPoint。它支持2路和3路合并。
ppt-diffmerge-tool --local="$LOCAL" --remote="$REMOTE" --base="$BASE" --output="$RESULT"
参见: