Learning Git - distributed version control system

git branches

Getting started with Git

Actually I was learning Git with these 2 books

A little bit practice and you do not need more books, you will just use Git, but if you want - here are 2 more fresh books

Are you already in touch with all that stuff ? Than get deeper ...

Git shouldn't be so hard to learn.

Are you getting visual information better or want to have clear representation of all Git operations ?

Interactive tutorials

It will help you to start your Git experiments in an free time (while reading a Git books)


it's so much of then allover the Internet, so you always can find more and better


Huge list of Git books

Blog update #Feb'14 - Multilingual articles, sharing, kudos, seo optimisation


It has been a long time without a big update here, but not today. Today is the release day :)

  • Blog now support 3 languages - English (default), Russian and German. Now I will try to make all big posts in Russian too. German - is for my self motivation. In some time I should get enough knowledge of this great language to write IT post in it.
  • Posts and Notes are translated using different techniques in Yii2, it was a good experience
  • Share buttons - I have tried to make very light widget without tonnes of JS. Btw. need to prettify it and post to packagist.
  • Kudos - these cool smileys in the bottom on full text of the article. Don't know why, but I like it, just a quick and lazy "Thank you" button. Made it with localStorage to store vote status, so it does not pollute requests with Cookies. Also should be on packagist soon.
  • Automated deploy script - thanks to Davert and his Robo. As you can see on screenshot - it works. And I will definitely use it in future.
  • Lots of fixes inside and in HTML layout, but who cares ... :)

Read more ...

Getting started with Vagrant - automated dev servers deploy and provisioning


What is it? Why do I need it?

Have you ever made big server side application with wide technologies and software stack in a team ? Or have you tried to connect quickly to an "old" backend project and bring some help? Or maybe one of your colleagues had ever said to you "hey, that script/soft is not working on my machine..." but you don't understand what is wrong and can't reproduce it. If yes - then you know this pain :

  • you have Windows PC, but want to develop webapp on Linux server
  • usually only some member of a team is a good sysadmin and he is responsible for setup and configuration, during development software stack is changing or require update etc. and every member of a team need to make it by himself on his localhosts
  • you are contributing to different projects and need quickly switch between then - but these projects require different versions of some software like PHP or MySQL and can't co-exist with each other
  • you often work on different laptops etc. and don't want to pollute all of them with server-stack software
  • you need to track versioning of you dev server environment and should be able to checkout not only app code to some moment of time, but server also
  • new member came to your team and you need to setup a full local dev environment in a minutes and for sure without "oh, really I forget this one ..."

We are lucky as now Vagrant exist to solve it. Literally Vagrant is a software that could setup you a local (or cloud) dev Virtual server using a configuration file. So it could be tracked as a project file inside Git repo. It can make server provisioning using Shell script or Ansible, Chef, Puppet.
Anyone, anywhere, anytime could run one terminal command to get their own local dev environment that is exact copy of your own - reliable, reproducible and for sure.

Very important to understand that Vagrant is for Dev machines only. It does not supposed to be used for Production env. deployment. It does not replace cloud orchestration software and great provisioning tools like Ansible/Chef/Puppet (but can utilize them as well, so you could reuse production provisioning scripts on dev machines).

Vagrant has quite good documentation and you should definitely go through it. Here I will juts cover briefly all major points.

Install Vagrant in Ubuntu

It is available for Linux, Windows and Mac. But all examples here assume Ubuntu Linux as Host and Virtual machine.

Quick start : Vagrantfile - The Journey Begins...

just 2 simple terminal commands ~~~ $ vagrant init precise32 http://files.vagrantup.com/precise32.box $ vagrant up ~~~

First command will create a Vagrantfile file in this dir and this config will be predefined ~~~ ... config.vm.box = "precise32" config.vm.box_url = "http://files.vagrantup.com/precise32.box" ... ~~~ now running vagrant up will actually start VirualBox instance according to Vagrantfile in current directory. In our case it will download Ubuntu 12.04 box from internet and run it/
Vagrantfile contain all settings for our server.
You can think running a VirtualBox is a big performance overhead for a dev server - but I think it is not. At least it is reliable price for a full isolation of environment. Plus don't forget that we are running server version of Linux without GUI - so 512 Mb Ram and some CPU time will be quite enough for a dev machine.

Read more ...

Autoupdate VirtualBox Guest Additions in Vagrant


While using Vagrant (I'll leave the question "Why should I use it?" for some future post) and taking ready made Boxes from http://vagrantbox.es - the fist issue I have faced was a warning about inconsistency of VirtualBox Guest Additions and actual VirtualBox version I am using.

Why is this happening ?

Because VirtualBox Guest Additions - it is drivers etc. installed inside the Box (that you are downloading somewhere) and for each new VirtualBox version new Guest Additions are required.
It can work with old version in general, but very essential parts could fail - like shared folders etc.

How to fix it manually

You could go to VirtualBox downloads server and find yourself needed ISO, download it inside Vagrant box via wget for example, mount it and install. But it is boring :)

Autoupdate Guest Additions via Vagrant plugin

vagrant-vbguest comes to help us with it.


vagrant plugin install vagrant-vbguest


Add one line in your Vagrantfile

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vbguest.auto_update = true

and restart Vagrant box vagrant up

If you are lucky - everything else will happens automatically and you will be notified about version of Guest Additions that is being installed.

Also go through Configuration docs for vbguest to see other useful params.

Kuzminov "iJackUA"
Web Team Lead
at MobiDev (Kharkiv, Ukraine)
Code in PHP and Ruby, play with JS/Node.JS, evaluate Elixir, explore databases, use Ubuntu and MacOS, think about IT people and management