Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Add tab completion for Git branches in Powershell

When inside a Git repository, is it possible to add tab completion for branches to Powershell? For example:

PS> git checkout maTAB

would result in

PS> git checkout master 
like image 274
Gabe Moothart Avatar asked Aug 27 '10 17:08

Gabe Moothart


People also ask

What command allows you to create new branches or see information on existing branches?

The git branch command lets you create, list, rename, and delete branches.


2 Answers

For that to be possible, a git provider for PowerShell would need to exist.

After a quick search, something similar apparently exists, the bizarre but aptly named posh-git:

http://github.com/dahlbyk/posh-git

A set of PowerShell scripts which provide Git/PowerShell integration

  • Prompt for Git repositories: The prompt within Git repositories can show the current branch and the state of files (additions, modifications,
    deletions) within.
  • Tab completion: Provides tab completion for common commands when using git. E.g. git ch<tab> --> git checkout

Usage

See profile.example.ps1 as to how you can integrate the tab completion and/or git prompt into your own profile. You can also choose whether advanced git commands are shown in the tab expansion or only simple/common commands. Default is simple.

like image 139
fletcher Avatar answered Oct 10 '22 01:10

fletcher


I wrote this little PS "gem", if posh-git is too much.
Just put it in your PowerShell profile to be able to type co  (with a space) and hit Tab to trigger completion and cycle through the list of branches:

function co {     param(         [Parameter(Mandatory)]         [ValidateNotNullOrEmpty()]         [ArgumentCompleter({             param($pCmd, $pParam, $pWord, $pAst, $pFakes)              $branchList = (git branch --format='%(refname:short)')              if ([string]::IsNullOrWhiteSpace($pWord)) {                 return $branchList;             }              $branchList | Select-String "$pWord"         })]         [string] $branch     )      git checkout $branch; } 

UPDATE: refactored to return a list of branches when tab-completion invoked after space and no partial string can be matched. Will return "master" if this is only one branch

As a bonus, did you know you can call TortoiseGit from shell?

function dif {     TortoiseGitProc.exe /command:repostatus } 
like image 20
Yuriy Gettya Avatar answered Oct 10 '22 02:10

Yuriy Gettya