LoginSignup
27
26

More than 5 years have passed since last update.

gitの作業状態を他のリポジトリにコピーする

Posted at

ノートPCとデスクトップなど、複数のPCで開発する際に、中途半端な状態のままPCだけ移動したいと思うことはありませんか?
終電が迫っていて持ち帰りたいとか、バグを他の人にちょっと見て欲しい時とかありますよね。いちいちコミットを作成してもいいですが、ちゃんと動作しないものをコミットに含めるのには抵抗がありますし、後で正式なコミットに切り分けるのも面倒です。
ずっと悩んでいましたが、こちらを見て意外に簡単な方法で実現できることに気づきました。

まず、元のPCでgit diff > /path/to/current.diffでHEADとの差分を取り、差分ファイルを別のPCにコピーします。
そして別のPC(リポジトリ)でHEADをpullしてから、git apply /path/to/current.diffで同じ状態になります。
diffの保存先をDropboxなどにすれば手間はほとんどかかりません。
こんなシェルスクリプトを書いて運用しています。

git-stashdiff
#!/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的にはこちらの方法が正しいのかも知れません。

27
26
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
27
26