ごらくらいふ

プログラミングしたりゲームしたり

一括でRenameしたよ、というコミットをサクッとレビューする

gitのお話。 ディレクトリ整理とかで多数のrenameが発生した修正のレビューをすることになった。 pathの変更を見ればいいだけなんだけど、長すぎてGitHubのPull-Requestでは省略されてしまう。といったシーン。

結論

fetchしてdiffやshowで確認する。 --summaryオプションをつければよい。

git show --summary {commit-ref}
# あるいは
git diff --summary {base-commit-ref} {commit-ref}

diff部分がまとめられて、renameの状況が確認しやすくなる。 たとえば foo/baz/foo/bar/baz/に移動した場合、次のように表示される。

rename foo/{ => bar}/baz/aaa.txt
rename foo/{ => bar}/baz/bbb.txt
rename foo/{ => bar}/baz/ccc.txt
rename foo/{ => bar}/baz/ddd.txt
rename foo/{ => bar}/baz/eee.txt

xyzドメイン切れたしmastodonインスタンスの更新を始めた

.xyzドメインがお役御免となった。

.devドメインのためにGoogle Domainsを使い始め、ついでに .com ドメインも取得したので、もうxyz維持する必要もないのだ。

これに伴い(自動更新で意図せず)生きてるVPSの整備を再開しようと思いたち、今mastodonの更新をしてる。

yajamon.hatenablog.com

この記事のやつね。(当時v1.2.2、現在v1.3.2)

2019/06/25現在、mastodonの最新バージョンは v2.9.2らしいので、正式バージョンだけでもおよそ50件近い更新作業が必要らしい。早速 v1.3.3 に更新した。 一日に一件程度のペースで着実に更新していけばなんとかなるかな…。

雑多にやったこと

サービス再起動のたびにコマンド打つのが面倒で、シェルスクリプトにまとめた。

#!/bin/bash

echo "mastodon stopping..." >&2
service mastodon-streaming stop 
service mastodon-web stop 
service mastodon-sidekiq stop 

echo "infra restarting..." >&2

service rh-redis32-redis restart
service httpd24-httpd graceful

echo "mastodon starting..." >&2
service mastodon-sidekiq start
service mastodon-web start
service mastodon-streaming start

もはや && でつないでさえいないけれど、まぁこれでいいのだ。initスクリプトにrestart足してもいいんだけどね…

参考リンク

また飽きたりしても大丈夫なように、参考リンクとか残しておく。

gitが追跡していないファイル(untracked files)を消す方法は、ちゃんとgitが用意している。(git clean)

git help読んでないマンが露呈していた!!

追跡していないファイルの削除には git clean コマンドを使用するとよい。

# dry-run。対象ファイルを確認できる。 
git clean -n

# 実施。
git clean -f

# 追跡していないディレクトリも対象とする。
git clean -n -d
git clean -f -d

git clean-n, -fのいずれかを必ず付与しなくてはならない。 間違い減らしの取り組みっぽい。

git-scm.com

yajamon.hatenablog.com

一年前の自分へ: vimでsyntax highlightが欲しいならファイル作らなくてもいいんだぞ

例えばmarkdownのsyntax highlightが欲しいならこうだ。

:set filetype=markdown

yajamon.hatenablog.com

Gitでuntracked filesの一覧を出したあと削除するとき、ヒストリ展開を使わなくてもxargsで十分削除できた

xargsうまく使えないマンが露呈している。

結論

# 一覧から消したいものだけgrepで絞る。
git status --untracked-files | grep '*.foo'

# コマンド履歴から直前のコマンドを持ってきて、xargsを加えて消す。
git status --untracked-files | grep '*.foo' | xargs rm -iv

yajamon.hatenablog.com

Gitでuntracked filesの一覧を出したあと削除するとき、ヒストリ展開を使えば楽だった

git resetでちょっと巻き戻したときとか、非追跡なファイルの削除にはいつも手間取っていた。 まずコマンドで一覧を出して、絞って、同じコマンドのあたまに rm をつけて。

手作業でめんどうなことこの上ない。でもシェルは強力なツールなのでしれっと解決してしまう。

結論

git status --untracked-files | grep '*.foo'
rm -iv $(!!)

gitで管理していないファイルのリストを見る

git status --untracked-files

ここからさらに処理したい対象をgrep等で絞ってもよい。

ヒストリ展開を使って指定

bash, zshで確認したが、ヒストリ展開機能というものがあり、特定の記法を行うとマッチするコマンドに置き換えてくれる。

!! と入力すれば、直近のコマンドとなる。

よって非追跡ファイルのリストをサブシェルで確認し、 rm のパラメータにしてしまえばよいのだった。

現在のbranchを(branch nameを書かずに)リモートにPushしたい

結論

git push -u origin $(git branch --contains | cut -d' ' -f2)

git branch --contains=[ref]はrefの示すcommitを含むbranchを列挙する。 特に指定しなかった場合、HEADを指定したものとする。

branchをチェックアウトしている前提なので、cutコマンドで*を削っている。

これで^Rのコマンド履歴から使い回せるようになった。TAB叩くコスト削減。