处理Microsoft Word和/或OpenOffice文件的Git(或Hg)插件

41
有没有人遇到过针对OpenOffice或Microsoft Word文件的Git或Hg插件,可以进行“有意义”的差异/合并/分支操作?
我知道我可以“checkin” .doc文件,但是Git和Hg都将它们视为二进制块。我想能够对文件文本执行所有(或至少许多)正常的基于修订的操作。
是的,我知道我应该使用Latex或在RTF之间转换文件。我只是在寻找一种更“本地”的解决方案,因为我正在尝试管理技术人员和“管理人员”之间的协作。
这与我在Biostar上的问题相关:http://biostar.stackexchange.com/questions/1749/writing-collaboration-with-source-control-and-microsoft-word 谢谢。

3
不是一个答案:使用维基百科。如果您需要对其进行版本控制/携带它,请寻找带有Web服务器的git/hg启用的维基百科(技术人员可以使用维基文件/本地副本,管理人员使用常规Web前端)。 - ZeissS
17
管理层拒绝使用除微软Word以外的任何东西。谷歌文档几乎成为一种可能性,但他们被别人能看到他们的手稿的想法吓到了。我没有告诉他们在电子邮件过程中,多达20台计算机也会“看到”他们的手稿,因为我害怕会回到纸质系统。 - JudoWill
你可能应该告诉他们这个。或者如何使用Google文档或正确设置的Wiki比在各处传递未加密的电子邮件更安全。最好的情况是他们会听取你的建议并让你改进事情。最坏的情况是你仍然会陷入同样的问题。 - majinnaibu
在学术环境中,LaTeX 是首选;因为它能够将格式与内容分离,这样就更容易协作编辑文本。当然,由于它是源代码,使用 git 进行版本控制也非常简单。 - TamaMcGlinn
8个回答

11

10

2
这正是TGit所做的!这就是我在上面的评论中谈到的,但你只需要创建一个_新的_差异/合并工具,如果你想直接从git调用它或者你没有tortoiseXXX。那么Mac用户该怎么办呢?如果您有TGit,则只需使用资源管理器扩展进行差异比较、合并等操作。请注意,如果您使用git merge/rebase,它仍将失败,您仍然需要手动合并word文档,这也是最初的目标。仍在寻找。NB xml无效。 +1 for screenshot. - Mark Mikofski
谢谢澄清!其实我只是想安装TGit :-) - rlegendi
1
在我看来,这是最好的答案 - 链接的博客文章让您可以使用TGit的单词差异脚本,而无需安装TGit(它通过安装msysgit干扰Cygwin的git)。 - Rich
最好的事情是,Word还可以合并文档! - Honza Kuchař
使用 https://developers.kilnhg.com/Code/Kiln/TortoiseHg/WinBuild/Files/contrib/diff-scripts/diff-doc.js?rev=tip&nr= 的脚本需要 (Word 或 OpenOffice) 和 https://en.wikipedia.org/wiki/Windows_Script_Host。 - JasonPlutext

9

如果你使用的是MS Windows操作系统,可以使用TortoiseGit。我刚刚经历了这种痛苦的经历,尽管TGit并不太优雅,但它可以减轻一些痛苦。还有几点需要注意:

  • Surprisingly git diff and gitk both do a reasonably good job of at least visualizing diffs between .docx (not sure about .doc, but I would assume it's the same). This is good for just a quick scan of diffs when doing commits.
  • You are completely out of luck as far as fast forward and automerging is concerned. Unfortunately I have not found a tool that can handle this (although I like the xml idea above), so you will have to do all merges manually.
  • Microsoft Word (MS Word) has a decent, if flawed, merge tool. AFAIK, it can only do 2-way merges (i.e.: X0 + dX = X1), not 3-way or 2-parent merges, which are more common in version control (i.e.: X0 + dX1 + dX2 = X1). You could solve merge conflicts using this tool, but there would be some legwork right - checking out each branch, exporting HEAD as an untracked version, etc.

    X0 = *.BASE.docx,
    X0 + dX1 = *.LOCAL.docx and
    X0 + dX2 = *.REMOTE.docx
    
  • Luckily this is exactly what TGit (and TSVN too) do. I would unfortunately, avoid rebase since if you have to replay several changes in a row, it can be very tiring, but merge for short documents is fine, just not great.


4
回答JudoWill的问题 - Workshare可能是律师们使用最多的领先工具。

为了帮助一些人省去许多点击,该服务每年收费300美元,提供免费试用,并且可以比较PDF和Word文档,并对(嵌入的)图像进行OCR处理。 - TamaMcGlinn

3
我在这里编写了多个地方的说明:http://bit.ly/17LaxVY
# download docx2txt by Sandeep Kumar
wget -O docx2txt.pl http://www.cs.indiana.edu/~kinzler/home/binp/docx2txt

# make a wrapper 
echo '#!/bin/bash
docx2txt.pl $1 -' > docx2txt
chmod +x docx2txt

# make sure docx2txt.pl and docx2txt are your current PATH. Here's a guide
http://shapeshed.com/using_custom_shell_scripts_on_osx_or_linux/
mv docx2txt docx2txt.pl ~/bin/

# set .gitattributes (unfortunately I don't this can't be set by default, you have to create it for every project)
echo "*.docx diff=word" > .git/info/attributes

# add the following to ~/.gitconfig
[diff "word"]
    binary = true
    textconv = docx2txt

# add a new alias
[alias]
    wdiff = diff --color-words

# try it
git init

# create my_file.docx, add some content

git add my_file.docx

git ci -m "Initial commit"

# change something in my_file.docx

git wdiff my_file.docx

# awesome!

它在OSX上运行得非常好


能够处理还原吗? - eric

2

1

律师事务所有非常强大的系统来完成这个任务。他们不相信文档中的修订历史(因为它是外部来源的),而是使用自己的比较方法,并提供增量差异。如果这是他们真正需要的,那么最好购买该系统,而不是将其包装到git或mercurial中,因为对于他们来说这些软件可能永远无法使用。

很抱歉听起来像个悲观主义者,但更可能的情况是技术人员会使用昂贵的商业工具(虽然他们可能会抱怨),而不是办公室人员会使用git或mercurial以达到满意程度。


9
我希望你能翻译以下内容:我不指望他们使用git或hg……我希望他们使用Word(或类似的工具),然后我希望使用插件来帮助合并。我在一个学术机构,所以我想我买不起定制解决方案。不过,出于好奇,你知道“律所”系统的名称或链接吗? - JudoWill

1

使用svn(不是git或hg,但你可以有一个网关),有一个扩展可以在未压缩的XML文件上工作,参见我的回答关于类似的问题。 顺便说一句,如果你曾经查看插件代码并将其改为支持hg而不是svn,请告诉我!;-)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接