So Chigusa

ひとりでもgit、みんなでもgit

latexdiffを使う

gitに対応したlatexdiff-vcを用いてgitレポジトリの任意のバージョンとのdiffが取れる。より詳しくは別記事を参照のこと。

mergeの活用

gitを使用していない多人数プロジェクトで原稿を同時編集する際など、原稿の変更点を途中で合体させるためにmergeが活用できる。

簡単のため、最初にローカルmasterの変更点は全てpushしておく。

git push origin master

次にmasterのバージョンを同時編集が始まった時期に戻す。

git reset --hard (commit)

ブランチを切って、新しいブランチ上に別の人が編集した原稿を更新する。

git branch (branch name) git checkout (branch name) cp (new draft) (old draft)

masterも最新のバージョンに戻し、変更点をmerge。

git checkout master git pull origin master git merge (branch name)

コミット履歴をファイル単位で消去・修正する

起きたこと

リモートリポジトリとして最初は bitbucket を使っていたのだが、あるときに github に乗り換えて必要になったリポジトリから順次移行作業を行っていた。 該当のリポジトリでは 100MB を超えるサイズのファイルをコミットしてしまっており、最新のコミットからはすでに削除済みではあるものの、コミット履歴中にそのファイルの情報が残っていた。 この点が bitbucket では問題にならなかったのだが、github に移行した際に 100MB のファイルサイズ制限に引っかかってしまい、コミット履歴からこのデカいファイルの情報全てをコンシステントに消し去る必要が生じた。

やったこと

こちらの記事を参考にさせていただいた。 履歴にあるサイズが大きいファイルは Atlassian が提供している git_find_big.sh というシェルスクリプトで探し出せる。 リポジトリの root で

./git_find_big.sh

消すべきファイルが特定できたら、以下を実行する。

#!/bin/bash TARGETS=( "[target file name]" ) target=$(printf " %s" "${TARGETS[@]}") target=${target:1} git filter-branch --index-filter "git rm -r --cached --ignore-unmatch ${target}" -- --all

もちろんリポジトリのバックアップ(この場合は元のリモートリポジトリで十分)はしっかり取っておくこと!