Skip to content

Instantly share code, notes, and snippets.

@ejo090
Last active August 29, 2015 14:09
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ejo090/2a553ca05386d4492f31 to your computer and use it in GitHub Desktop.
Save ejo090/2a553ca05386d4492f31 to your computer and use it in GitHub Desktop.
PowerShellでGit(Github for Windowsとかのアレ)を使うときに`git add`とかを`ga`みたいにするやつ

これはなに

  • WindowsでGit(Github for Windowsとかのアレ)を使うときにgit addとかをgaみたいなaliasにして楽をしようというアレ
  • ちなみに、PowerShellのバージョンは4.0です。確認はPowerShell上で$PSVersionTableをすればPSVersionとかいうのがでてくる

まず

  • PowerShellでもよくあるエイリアスというものを設定できる。
  • AliasとPowerShellで打ち込んであげると設定されているエイリアスを見ることができる。
  • エイリアスを設定するときはSet-Alias 設定したいエイリアス コマンドレットみたいな感じでできる。

しかし

  • PowerShellではSet-Alias ga "git add"みたいに書いてもエイリアスとして設定できない!

なぜか

  • そもそもPowerShellはオプションを持ったコマンドレット、関数、スクリプトファイルやプログラムに対してエイリアスを設定できないらしい?参考
  • (もう少し詳しいPowerShellの情報が欲しい)
  • コマンドレットに関してはここを参照してください。

解決策

  • PowerShellの.bashrc的なところに関数を書いてしまえ
  • PowerShellの.bashrc的な奴は$PROFILEというもの、それに関数を書いてしまうワケだ

やりかた

  1. $profileしてお目当てのファイルとディレクトリ構造が出てくるのでNew-Item -Path $PROFILE -ItemType file -Forceして新しいファイルを作る(既にあるようなら作らなくてもいい)
  2. notepad $profileとかして当該ファイルを開く
  3. function ga() { git add $args }みたいに書く
  4. 保存してPowerShellを再起動
  5. それっぽいことが†できる†

つまり

  • function gc() { git commit $args }とか
  • function gco() { git checkout $args }とか
  • function gst() { git status $args }とか
  • function gm() { git merge $args }とかもできるワケです。(一部未確認)

まとめ

  • めんどくさいけどできることにはできる

現状の問題

  • gcoとかでtab補完がきかなくてつらい
  • どうやらファイル以外の補完をしてくれない
  • 完全に存在意義を失ったgistが誕生した

上記の問題について

  • 対策を見つけた。困ったときのstackoverflowである。 ここ
  • 簡単に説明するとnotepad (Get-Command TabExpansion).ScriptBlock.FileとPowerShellに打ち込み、件のGitのタブ補完設定ファイルを開く。
  • 開いたファイル内でfunction TabExpansion($line, $lastWord){ ~hogehoge~ }という関数を見つける。
  • そしてその関数の1行目に$line = $line -replace '^gco ', 'git checkout 'と書いてあげて、保存。PowerShellを再起動。
  • gcoでもTab補完が使えるようになる†
  • やってることは理解できると思うので解説は省略。(というか当該記事を参照せよ)
  • ということなのでつまり、Tab補完使いたいけど出来ないときはこの例のように$line = $line -replace '^gm ', 'git merge 'って書いてあげると他のコマンド群でも使えると思う

結論

  • めんどくさいけどできることにはできる
@ichiren1
Copy link

👏

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment