A productive development environment
How to easily setup our development stack based on vim, git, zsh and git-flow
Updated: Peter Aronoff suggested an update for the brew formula for vim. Thanks!
Every programmer has their own way to set up a programming environment, and usually has to set it up several times in different machines. So that is how we set it up in Codegram.
What we use
- Mac OSX 10.6
- ZSH and robbyrussell's oh-my-zsh
- Last version of VIM and our vimfiles
- GIT and nvie's git flow
So let's go. First of all, we're gonna install ZSH, install the oh-my-zsh framework and define it as the default shell:
brew install zsh wget http://github.com/robbyrussell/oh-my-zsh/raw/master/tools/install.sh -O - | sh chsh -s /bin/zsh
Note that you will need wget installed with
brew install wget to install oh-my-zsh the fast way. If you want, you can find the manual instructions on the Github project's page.
An interesting feature coming with oh-my-zsh are plugins. By default, the git plugin is enabled. This plugin has some really useful alias:
ggpull, which is an alias of
git pull origin ($current_branch), where
$current_branchis the name of the project branch you are on,
ggpush, which works pretty much like
pushes to your
ggpnp, which equals to
ggpull && ggpush.
VIM, that freaking editor
If you are not using VIM already, you should really start using it. Let's install it together with Codegram's vimfiles:
brew install https://gist.github.com/raw/721952/335334bba22da294a06eb7bdf02722acbf51cab2/vim.rb cd git clone http://github.com/codegram/vimfiles.git .vim sh .vim/install.sh
As you may know, VIM is a really powerful and fast code editor, but you need to get used to it to code fast. A good way to start is taking a look at these cheatsheets. The reason to install Codegram's vimfiles is that they bring a lot of plugins. You can find the plugins usage in the documentation.
Note that VIM is a terminal editor, so say goodbye to your mouse :)
Ruby Version Manager and GIT
Let's suppose you are creating an open-source application and you need to test it under Ruby 1.9.2 and 1.8.7. So you should install Ruby 1.8.7, test the application, install 1.9.2, test it again... Ruby Version Manager (RVM) allows you to have different installations of Ruby living together, each one with its own gems. To install it, we'll need GIT, which is so famous that I will just say that it allows you to track the development of a project through branches and commits.
brew install git bash << ( curl http://rvm.beginrescueend.com/releases/rvm-install-head ) rvm install 1.9.2 rvm install 1.8.7
The best way to release stable features fast is to have a well-defined version control flow. That is why we use git-flow to organize our git branches.
This nifty tool follows the conventions introduced by Vincent Driessen in his article a successful Git branching model.
The easiest way to install git-flow is to use brew again:
brew install git-flow
Once installed, you have to initialize your repo to use git-flow first:
git flow init
We're sticking to the conventions there: master for the stable releases, develop for features waiting to be pulled into production, feature as a feature prefix for new features and support & hotfix for support branches and hot fixes into master as well.
From then on, you can use the built-in commands to easily start and finish features, and tag releases as well.
git flow feature start <name> [<base>] git flow feature finish <name> git flow release start <release> [<base>] git flow release finish <release> git flow hotfix start <release> [<base>] git flow hotfix finish <release>
You can learn more about its options in git-flow's github repo.