I work regularly with several different project types and languages across Windows, Mac, and Linux.

I find some basic settings for Git and VS Code smooth out some headaches.

For VS Code, I have (at a minimum) several base plugins:

  • C#
  • Chef Extension for Visual Studio Code
  • Git Blame
  • Git History (git log)
  • PowerShell
  • Rust
  • Ruby
  • XML Tools

And my user settings include:

"files.eol": "\n", // Windows usually doesn't care, but Linux/Mac tooling is way more sensitive
"editor.trimAutoWhitespace": true,
"editor.fontSize": 16,
"rust.cargoHomePath": "C:\\Users\\Steven\\.cargo", // Path to Cargo home directory, mostly needed for racer. Needed only if using custom rust installation.
"editor.formatOnPaste": true,
"editor.formatOnSave": true,
"window.zoomLevel": 0,
"[powershell]": {
    "editor.tabSize": 4
"[ruby]": {
    "editor.tabSize": 2

My git config consists of:

    helper = wincred
    email = <my email here>
    name = Steven Murawski
    signingkey = <my gpg signing key here>
    tool = default-difftool
[difftool "default-difftool"]
    cmd = code --wait --diff $LOCAL $REMOTE
    commit = commit -S -s
    editor = code --wait
    eol = lf
    autocrlf = input
    excludesfile = ~/.gitignore
[difftool "winmerge"]
    cmd = /c/Program\\ Files\\ \\(x86\\)/WinMerge/WinMergeU.exe
    program = c:/Program Files (x86)/GNU/GnuPG/gpg2.exe

Since I work on a number of projects that require a DCO signoff, I just default to signing off my commits (alias.commit) and I GPG sign them because I like how they look in the GitHub UI. ;)

I’ve set git to only use Linux line feeds for new clones/fetches (core.eol) and change anything with CRLFs on upload (core.autocrlf). To aid in this, my editor config has line endings set to \n as well.