Git
PowerPoint

発表用のスライドをGitで学会ごとにブランチで管理(Power Point)~単なる版の管理を越えて~

More than 1 year has passed since last update.

目的

  • 共同研究者とのスライドのやり取りなどをバージョン管理して、常に最新の状態を保ちたい
  • 学会(聴衆)ごとにスライドの内容やノートを変えたい
  • 特定の学会で変更したスライドの修正を別の学会用のスライドに反映させたい

Gitを使わない今までのバージョン管理法(問題点)

  • 名前で管理
    • そのうちファイルが多くなって訳が分からなくなる。
    • レビュー待ちの時に編集してしまうと訳が分からなくなる
    • 直前の変更などが学会が終わった後行方不明になりがち
  • 一つのパワポに全学会のスライド保持
    • 別テーマでの研究内容も保存している場合、人に渡すときは一回一回取り除く必要
    • ファイルの容量が重くなる
    • 日本語と英語で異なるサイズ比を使っている場合それの変更ができない

解決策

無題.png

  • バージョンをGitで管理
  • 学会ごとのスライドの管理はブランチを切って行う
  • マージはパワポの差分比較機能による手動マージ

前提

  • Gitの基本的な使い方については理解している(git add, git commit)
  • ユーザー名、メールアドレス、日本語設定などは終わっている
  • 非情報・プログラミング系の人が対象

Gitでのバージョン管理

Gitで最初の学会のスライドのバージョン管理

最初にgit initでフォルダをgit管理できるようにします。

git init

.gitフォルダが出来たのを確認したのち、パワポのスライドを作成します。

今回は
presentation.pptx
というファイルを作ります。
これを以下のようにコミットしてバージョンの管理を行います。

git add presentation.pptx
git commit -m "initial commit"

次にブランチを切ります。これによって、特定の学会専用のブランチを作ることが出来ます。
今回はPhysというブランチを作ります。

git branch Phys

作成したブランチは以下のコマンドで確認することが出来ます。

git branch

*がついているのが現在自分がいるブランチです。
まだmasterブランチにいるはずなので、checkoutして先ほど作成したPhysブランチに移動します。

git checkout Phys

これで、Phys学会用のブランチに移動することが出来ました。

git branch

すると*がPhysについていることが分かります。

この上でスライドを編集することでPhys学会のスライドとしてバージョン管理することが可能になります。
どんどん編集していってコミットしていきましょう。

他の人に渡すときや完成したときにタグ付け

さてある程度仕上がると他の人にレビューを受ける必要があると思います。
その際、tagを付けておくと、いつ何を送ったのかわかりやすくなり、レビューを受けた時の管理がしやすくなります。
送る時は一旦コピーして名前を変えてから送ると思うので、タグ名はその名前にするといいでしょう。

git tag -a presentation_170908

校閲後のスライドが返ってきたら

レビューが返ってきたら、元あったやつは削除して、送られてきたものに入れ替えます。
差し替えた後、名前をpresentation.pptxに変更します。
レビューしてくれた人がパワポの校閲機能で編集してくれてる場合は一旦すべて承認します。
その上でコミットします。

git add presentation.pptx
git commit -m "レビュー返ってくる"

送ってくれたファイル名(版の管理という概念を理解している人からの返信ならpresentation_170908_revA.pptxとかなってると思います。)でタグをつけておくといいでしょう。

git tag -a presentation_170908_revA

問題なければこのまま編集していけばいいです。

レビュー待ちの状態で編集を進めていた時の対応

さて面倒見のいいレビュアーだと途中段階でも校閲してくれると思います。そのような場合、レビューが返って来る間も編集を続けることになります。
そうなると送った時の版からみて、修正のされ方が違うファイル(自分で修正したものとレビュアーが修正したもの)が存在し、いわゆるコンフリクトが起きます。

その場合、返信が来た段階で自分の修正を保存してコミットします。

git add presentation.pptx
git commit -m "レビュー待ちの間に修正"

そのうえで先ほどと同じように、送られてきたファイル(レビュアーが編集したもの)に差し替えてコミットします。

git add presentation.pptx
git commit -m "レビュー返ってくる"
git tag -a presentation_170908_revA

パワポの機能で差分比較

さて、このままだとレビュー待ちの間に自分で修正した場所が反映されません。
そこで修正した場所をレビュー後の修正に反映させるため、パワポの機能を使って校閲します。
そのために、ひとつ前のコミットを別ファイルとして取りだします。

git show HEAD^:presentation.pptx > temp.pptx

これで、一つ前のレビュー待ちの間に修正したファイルがtemp.pptxに保存されます。

これを使ってレビューしてもらったファイルに自分の修正を反映していきます。
presentation.pptxを開いて、校閲>比較を押します。それで、プロンプトが出るのでtemp.pptxを選んでください。
必要な修正を反映したら保存してコミットしてください。

ブランチを切って別学会用のスライドを作ってバージョン管理

さて、無事学会も終わっても、別の学会のスライドを作成する必要が出るとします。
同じ研究なら同じスライドを使いまわすことが多いと思いますが、分野によっては新しいストーリーを組み直すことが多いと思います。
それに伴って、結果やスライドの入れ替えがあると思います。
ただ、今まで作っておいたスライドのストーリーも残しておきたいので、ここでブランチを切ってBio学会のブランチを作ります。
ただし、ブランチを切り替える前にpresentation.pptxファイルは閉じておいてください。

git branch Bio
git checkout Bio

これで、Bio学会の発表用のストーリーでpresentation.pptxを編集することが出来ます。
どんどん直してコミットしていってください。

前の学会のスライドを見たいとき

PhysブランチにチェックアウトすればPhys上の内容に戻すことが出来ます。

git checkout Phys

Phys学会のスライドで追記や修正を行いたい場合は、ここで修正を行ってコミットすればBio学会のスライドに影響を与えることなく、ファイルを変更することが可能です。

Bio学会のスライドの編集をしたい場合はもう一度ブランチを変更すれば続きを編集することが可能です。

git checkout Bio

別の学会の発表の変更を前の学会のスライドに反映

一方のスライドを編集していると、他の発表でも利用したいスライドや共有しているスライドで微調整を行うことがあります。
これらの変更を別のブランチでも反映する方法について説明します。

Bioブランチで行った変更の一部をPhysブランチに反映させたいと仮定します。
まず、変更を取り込みたい方のスライドがあるブランチにチェックアウトします。

git checkout Phys

次に以下のコマンドでtemp.pptxというファイルにBioブランチ上のスライドのデータを書きだします。

git show Bio:presentation.pptx > temp.pptx

パワポでpresentation.pptxを開いて校閲>比較でtemp.pptxを開きます。
これで変更箇所が出てくるので取り込みたい変更を承認することでBioでの変更点を反映することが出来ます。
変更したら、temp.pptxを削除して変更をコミットしてください。

注意点

パワポの比較機能ですが、アニメーションの差分は取れないようです。
なので、アニメーションを取り込みたい場合は取り込む側の対象のスライドを削除してから比較機能を使うようにしてください。

その他

容量が大きくなった時はgit gc

やはりバイナリで保存しているのでコミットが増えるとどんどん容量が大きくなります。
そのようなときはgitの圧縮機能で容量を減らしましょう。

git gc

git diffでパワポの差分比較

パワポのノートなどは頑張ればgit diffで比較可能になります。
Appach Tikaを使うのですがやり方はgit diff で Office ファイルの差分を見るを参考にしていただければわかると思います。
注意点としては、1.16や1.15ではなく、1.14版を使わないとワーニングが出ることです。
またそのうちこのやり方についてまとめるかもしれません。
まとめました。git diffでパワポの差分比較を出来るようにする(Windows)

他のブランチの変更を反映させる時、ブランチをツリーとしてつなげたい

上の方法で手動マージをすると、ブランチをつなげているわけではないので、ツリーは分岐したままです。
記録としてツリーをつなげたい場合は、git showでファイルを持ってくる前に、git merge {持ってきたいスライドがあるブランチ}としてマージモードにしてください。
そのあと、git showでファイルを持ってきて、変更を反映しマージさせてください。
マージモード中git statusをすれば何をすべきかが分かります。

ただスライドの場合はプログラミング程バージョンによる違いがクリティカルでないので、そこまでする必要はない気がします。