(この記事はAtom Advent Calendar 2016 に参加しています: http://qiita.com/advent-calendar/2016/atom )

 

かつて、こんなことはなかったでしょうか:

チームでgitを使っていて、masterの変更を反映させたいとき。

「ローカルの編集を退避させたいのだけど、stashでなんかよくわからん記録をつくるほどでもないし、コンフリクトしているファイルだけcheckoutしちゃおう。」

「よし、mergeできた。(俺もgit使いこなせるようになってきたナァ)」

―10分後

「よし、全体をbuildしてruntimeテストしよう」 → ERROR

ナンデ!?

 

gitの操作によって必要なローカルの変更を削除しちゃう経験、ありませんでしたか?僕はありました。

むしゃくしゃしたのでこれを解消するatom packageを作りました。(実際にはどちらかというと泣きそうになりました)

Contents

git-auto-stash

https://atom.io/packages/git-auto-stash です。

これを導入することで、定期的にgit stashが作られ、ファイル喪失の悲劇が多少減るのでは、と思っています。ぜひ使っていただいて、必要な機能などフィードバックをください。

 

自動保存を実現するしくみ

gitってファイルの履歴が保存されるんだし、gitの機能をどうにか使ってこの自動保存の仕組みを作れないか、と考えていたところ、「working treeに影響を及ぼさずにgit stashを作る方法」があることを知りました。

git stash create + git stash store -m <コメント> <hash>

です。

これを定期的に行うことで、トラッキングされているファイルであれば、stashに保存されるようになります。こちらはなにも考えなくてよしなにしてくれるというのが素晴らしいですね。具体的には、atom.workspace.observeTextEditorsで取得できるeditorのonDidStopChangingを使って保存のトリガーとしています。

何分ごとに保存するか、auto stashの最大数はいくらにするかはsettings画面から指定できます。

 

atomナンデか

DropboxやTimeMachineでいいじゃん、という人もいるでしょう。

しかしこうした汎用的なサービスはいちいち過去ファイルを掘っていくのが面倒だし、それならば開発の際に必ずと言っていいほどお世話になるgitとatomで完結するほうが、僕には気持ちの良い解決に思えたのです。

また、sublimetextじゃないの?て人もいるかと思いますが、もうatomに乗り換えちゃいなよ、と言っておきます。それぐらいatomは進化しています。

atomはsublimetextよりも思想的に優れて(electronを採用してる点とか)いたものの恋に落ちるような心地よさは微塵も無く、僕も何度か乗り換えを試みましたが最終的には殺意とともに離別したものでした。ところが今年の10月ごろに半年ぶり4度目ぐらいの乗り換えを試みたところ起動はすんなり、packageもほぼエラーが起きない、書いていてウザい機能がオプションで無効化できる、さらにelectronならではの異常に便利なpackage群が僕を待っていました。

ES6ムズいね

はじめてES6を触ったのでPromiseの理解に最初はとても苦しみました。結果なんとか動くコードにはなったものの間違いなくベストプラクティスに則っていないため、pull requestお待ちしております。

いまは指定した分数ごとにauto stashを行うだけですが、1分前、10分前、30分前、60分前、3時間、6時間、12時間、24時間ぐらいに一定間隔の過去stashを保存しておく機能は今後追加したいなと思っています。

関連記事

fitbitの睡眠スコアを90弱で安定させる良い睡眠を続ける簡単な方法

m1 ipad pro 12.9 2021のusb-cハブはコレがベスト

Time Machine不要!Macを11.2.3にダウングレードして原神をm1 macbook airでプレイする

MH-Z19CとM5StickCで二酸化炭素濃度モニタリング

【神軽量HMD】Avegant Glyph 改造: 瓶詰堂さんのaltglyphを作った

PC、iPad、Android、switchもドックいらず!あまりに万能なusb-cハブが最強だった

コメント

コメントを返信する

メールアドレスが公開されることはありません。 が付いている欄は必須項目です