ノートPCとデスクトップなど、複数のPCで開発する際に、中途半端な状態のままPCだけ移動したいと思うことはありませんか?
終電が迫っていて持ち帰りたいとか、バグを他の人にちょっと見て欲しい時とかありますよね。いちいちコミットを作成してもいいですが、ちゃんと動作しないものをコミットに含めるのには抵抗がありますし、後で正式なコミットに切り分けるのも面倒です。
ずっと悩んでいましたが、こちらを見て意外に簡単な方法で実現できることに気づきました。
まず、元のPCでgit diff > /path/to/current.diff
でHEADとの差分を取り、差分ファイルを別のPCにコピーします。
そして別のPC(リポジトリ)でHEADをpullしてから、git apply /path/to/current.diff
で同じ状態になります。
diffの保存先をDropboxなどにすれば手間はほとんどかかりません。
こんなシェルスクリプトを書いて運用しています。
#!/bin/sh
current_dir=`pwd`
repository_name=`basename $current_dir`
utc_time=`date +%s`
target_dir=$GIT_DIFF_PATH/$repository_name
if [ ! -d $target_dir ]; then
mkdir $target_dir
fi
git diff > "${target_dir}/${utc_time}.diff"
環境変数GIT_DIFF_PATHにdiffの保存先(Dropboxなど)を入れておいて下さい。
gitはパスの通ったディレクトリにgit-xxxというコマンドがあればgit xxxというサブコマンドにしてくれるので、git stashdiffで実行することもできます。
なお、gitにはstashという機能があり、git stash save
で現在の作業状態を保存できますが、stashを他のリポジトリに移動するにはやや面倒な手順を踏まなくてはなりません。
それについては上記のスレッドに書いてあるので参考にして下さい。
git的にはこちらの方法が正しいのかも知れません。