LoginSignup
8
8

More than 5 years have passed since last update.

push漏れ防止策を作ってみた

Last updated at Posted at 2014-03-08

結構前から考えていた、ネタがあったのだけど、まとめると時間かかりそうなので、今月はさっき思いつきで作ってみたものの紹介。

概要

gitは以前から使っていて、プライベートの開発はgithubはローカルコミットー>PUSHを何も考えずにやっているのだけど、チームでの開発だとそうもいかない。

でもPUSHしたかどうかを確認したい!

対処方法1 - コミットの差分コマンドを作成してみる。

git log origin/master..masterでリモートとローカルのコミットの差分を見ることができる。でもこれだと、マスターだけだし、長い。
そこで、現在のブランチとそれと同じリモートブランチとの差分を取得するようなコマンドを作成した。

.bashrc/.zshrc
alias gbn='git rev-parse --abbrev-ref HEAD'

function glr() {
  _branch=`gbn`
  git log origin/${_branch}..${_branch}
}

bash/zsh両方で動きました。

対処方法2 - ケチケチせずに、プロンプトに出してみる。

そこらに転がっているので、別にそっち使えばいいけど、bash/zsh両方対応したかったので、自分で最初から書いてみた。
(やっぱり結局最終的にはほぼ同じコードができたけどねwでも久しぶりのshellが面白かった)

今回役立ったコマンドは以下
+ git rev-parse - ブランチ名などを渡すとそのハッシュ値を返してくれる

実は最初git show-refでやりくりしていたのですが、こっちのほうが整形とか簡単で使いやすかった。

zsh

通常時(またはPUSH後)

スクリーンショット 2014-03-08 1.12.43.png

コミット時

スクリーンショット 2014-03-08 1.10.02.png

bash

通常時(またはPUSH後)

スクリーンショット 2014-03-08 1.14.34.png

コミット時

スクリーンショット 2014-03-08 1.08.09.png

写真四枚使って言いたいことはアスタリスクがあるかないかってだけ・・・。
実際のコードは以下

.bashrc/.zshrc
function git_not_pushed {
  # git管理下にいるかどうかの確認
  if [[ "`git rev-parse --is-inside-work-tree 2>/dev/null`" = "true" ]]; then
    # HEADのハッシュを取得
    _head="`git rev-parse --verify -q HEAD 2>/dev/null`"
    if [[ $? -eq 0 ]]; then
      # origin/branch名のハッシュを取得
      ### gbnはブランチ名取得のalias。上に記載してある。###
      _remote="`git rev-parse --verify -q origin/\`gbn\` 2>/dev/null`"
      if [[ $? -eq 0 ]]; then
        # 比較して、違ったら*表示。
        if [[ "${_head}" = "${_remote}" ]]; then
          echo -n "*"
        fi
      fi
    fi
  fi
}

zshだったら、PROMPT/RPROMPTの中でgit_not_pushedを呼ぶ。

.zshrc
RPROMPT='その他色々`git_not_pushed`'

bashだったら、PS1の中でgit_not_pushedを呼ぶ。

.bashrc
PS1='その他色々`git_not_pushed`\$ '

「その他色々」はこの話とは別なので、省略します。


一つ書き忘れたので、追記
対処方法2のコマンドですが、git fetchして、リモート側のHEADを誰かが変更していた場合、コミットしていなくても*が表示されます。対応しようとしたけど、promptへの表示のため、あまり重い処理がかけないことと、今までfetchして放置することってあんまりなかったので、別にいいかーって対応していません。

8
8
0

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
8
8