As I was recently preparing for my Git on Windows talk, I naturally started tweaking the setup on Windows as well in the same direction, and I figured I'd share this setup.
Installing GitEither go with Git for Windows, or Git Extensions if you want more GUI as well as Visual Studio integration. I personally have grown a distaste for TortoiseGit, as it sometimes locks files in my repositories. But it's supposed to be good otherwise (as an alternative for Git Extensions).
During the Git install, you need to select the scary red option, for integrating Git into Windows cmd-line, if you want to use it from Powershell/Console2 (we'll get back to that later). The cygwin-like Git Bash is not sexy.
Update (30/4 2012): I think you could also wrap Console2 around Cygwin, although I haven't tried this myself yet. This way you can avoid the scary red option. There's also the alternative mintty terminal for Cygwin.You also get asked how Git should treat line endings. There are three options, you'll need to pick the one that suits you best (you can change it later):
- Windows style (convert to CRLF on checkout, and to unix on checkin, autocrlf true): Pick this one if you have programs that need to CRLF (notepad, scripts, tools).
- Checkout as -is, commit unix style (autocrlf input): All your programs can deal with LF just fine. This is the Github recommends this one.
- Checkout as-is, commit as-is (autocrlf false): You’re OK with everything ending up like CRLF - this is OK for pure Windows environments. It is not cross platform friendly.
Authing against Github with Putty
It is possible to get away with using the OpenSSH that installs along with Git, but as far as I know that will only work for command-line, and not for GUI tools. The Github docs explain that Putty is not supported for SSH auth, but that's bollocks. It works just fine.
Download and install Putty (you'll want the Windows installer for everything except PuTTYtel option).
If you're unfamiliar with the Putty tools, I'm not going to go too much into it, but you're gonna:
- Use puttygen for generating a SSH key
- Run pageant in the background, serving ssh-authentication (for any program that might ask, like Git Extensions, or TortoiseGit)
- Offer plink to the git command line as an authentication method (GIT_SSH)
|Generating a key with putty|
Save the private key file as $HOME/keys/id_rsa.pkk or something like that.
Open Putty/Pageant, go Add Key, and select the pkk file you just saved.
Set an environment variable called GIT_SSH to point at C:\Program Files (x86)\PuTTY\plink.exe or wherever you installed Putty/plink.
Open a command line window and do
git clone [one of your github repos SSH urls]
This should work with no problem. If it doesn't work, something has gone wrong in the setup:
- Pageant isn't running with the right key
- You didn't set up GIT_SSH properly (echo %git_ssh% to check)
- You didn't paste the key correctly into the Github settings
- You generated a key with less than 768 bits
Update (01.05.2012): If you run into this error message:
The server's host key is not cached in the registry. Youhave no guarantee that the server is the computer youthink it is.
It means that Github's SSH server needs to be authorized (I actually only noticed this when cloning from Gitorious, never saw it from Github). People usually solve this by doing an ssh email@example.com, and answering yes when prompted, but since Putty keeps its authorized keys in a different place, you have to:
Using username "git".Authenticating with public key "rsa-key-20120429" from agentServer refused to allocate ptyHi tfnico! You've successfully authenticated, but GitHub does not provide shell access.
- Open Putty
- Enter firstname.lastname@example.org in the Host Name field
- Pick Never under 'Close window on exit'
- Select Open.
- Click yes when the question pops. You should see something like this:
Now cloning should work.
Note that if you want to skip SSH entirely (I've actually seen company firewalls that block SSH), and just use Smart HTTP authentication (https). You'll get asked for password each time, so specify the credentials in your home-directory, in a file called _netrc like this:
Note that the password value is not very friendly towards special characters. But hey, if you wanted security, you should've gone with SSH instead.
The console windowFirst thing up is Console2. It's a wrapper of the normal command-line in Windows, which still, oh so many years later, sucks really hard. Console2 has tabs, sensible copy/paste, and nicer color options. Scott Hanselman has pretty much summed up the useful tweaks, and I won't add much else than a screenshot.
|Console2 with Poweshell & git-posh|
Key steps are:
- Paste this Solarized color theme into your Console2 config
- Pick a nicer font (Lucida console?)
- Use Powershell as shell (because of posh-git)
- Remove unnecessary toolbars and menus
- Enable Copy-on-select
- Remap New Tab (Ctrl + T) and Paste (Ctrl + V)
- Install posh-git (shows repo status in PS1, requires Powershell)