Q:

Prevent 2 space tabs from switching to 4 space tabs when I push to github

In VIM I've, all my tabs are 2 spaces. But when I push to github, they get converted to 4 spaces. Can anyone help me figure out how to prevent them from getting converted to 4 spaces?
My vimrc file:
call pathogen#infect()
call pathogen#runtime_append_all_bundles()

" search
set hlsearch                  " highlight the search
set incsearch                 " incremental search
set ignorecase                " search ignoring case
set showmatch                 " show matching bracket

" colors
set background=dark
let g:solarized_termcolors=8 " proper solarized coloring
colorscheme peachpuff

" syntax
syntax on
filetype on                   " Enable filetype detection
filetype plugin on            " Enable filetype-specific plugins
filetype indent on            " Enable filetype-specific indenting

set ruler                     " show the line number on the bar
set more                      " use more prompt
set autoread                  " watch for file changes
set number                    " line numbers
set hidden
set noautowrite               " don't write old file out when switching files
set lazyredraw                " don't redraw when don't have to
set showmode
set showcmd
set nocompatible              " vim, not vi
set autoindent smartindent    " auto/smart indent
set smarttab                  " tab and backspace are smart
set tabstop=2                 " 6 spaces
set shiftwidth=2
set scrolloff=5               " keep at least 5 lines above/below
set sidescrolloff=5           " keep at least 5 lines left/right
set history=200
set backspace=indent,eol,start
set linebreak
set cmdheight=2               " command line two lines high
set undolevels=1000           " 1000 undos
set updatecount=100           " switch every 100 chars
set complete=.,w,b,u,U,t,i,d  " do lots of scanning on tab completion
set ttyfast                   " we have a fast terminal
set noerrorbells              " No error bells please
set shell=bash
set fileformats=unix
set ff=unix
set wildmode=longest:full
set wildmenu                  " menu has tab completion
set laststatus=2
set diffopt=filler,iwhite     " ignore all whitespace and sync

" scss formatting
autocmd BufRead,BufNewFile *.scss ""set ft=scss.css

" jade formatting
autocmd BufRead,BufNewFile *.jade setlocal ft=jade noexpandtab
autocmd FileType jade :setlocal sw=2 ts=2 sts=2

autocmd VimEnter * NERDTree
autocmd VimEnter * wincmd p
autocmd Filetype javascript setlocal ts=2 sw=2 sts=0 noexpandtab

A:

The standard representation of a tab character is 8 spaces. In reality, the tab is a control character and as such doesn't have an associated glyphs or a set width. This allows most programs to offer a way to modify how it is displayed but no program ever change its width because it doesn't have one to start with: a tab is still a tab, no matter the value of tabstop.
Your Vim settings only alter how tabs are displayed in Vim: they have no bearings on how they are displayed outside of Vim.
You have two solutions:

set GitHub and Vim to use the same tab width
use spaces

Since we are at it…
set background=dark
let g:solarized_termcolors=8 " proper solarized coloring
colorscheme peachpuff

You can delete the solarized line if you don't use it and set background is useless because your colorscheme takes care of that.
set noautowrite

is also useless because autowrite is off by default.
And
call pathogen#runtime_append_all_bundles()

serves no purpose whatsoever.

