diff --git a/doc/update/2.6-to-3.0.md b/doc/update/2.6-to-3.0.md
new file mode 100644
index 0000000000000000000000000000000000000000..d7047d8eb19ccad5ca95d507eb0c8afe10c1339c
--- /dev/null
+++ b/doc/update/2.6-to-3.0.md
@@ -0,0 +1,63 @@
+# From 2.6 to 3.0
+
+### 1. Stop server & resque
+
+    sudo service gitlab stop
+
+### 2. Update code & db
+
+
+```bash
+# Get latest code
+git fetch origin
+git checkout v3.0.3
+
+
+# Install libs
+sudo -u gitlab bundle install --without development test postgres
+
+# update db
+sudo -u gitlab bundle exec rake db:migrate RAILS_ENV=production
+
+# !!! Config should be replaced with a new one. Check it after replace
+cp config/gitlab.yml.example config/gitlab.yml
+
+# update gitolite hooks
+
+# GITOLITE v2:
+sudo cp ./lib/hooks/post-receive /home/git/share/gitolite/hooks/common/post-receive
+sudo chown git:git /home/git/share/gitolite/hooks/common/post-receive
+
+# GITOLITE v3:
+sudo cp ./lib/hooks/post-receive /home/git/.gitolite/hooks/common/post-receive
+sudo chown git:git /home/git/.gitolite/hooks/common/post-receive
+
+# set valid path to hooks in gitlab.yml in git_host section
+# like this
+git_host:
+  # gitolite 2
+  hooks_path: /home/git/share/gitolite/hooks
+  # gitolite 3
+  hooks_path: /home/git/.gitolite/hooks/
+
+
+# Make some changes to gitolite config
+# For more information visit https://github.com/gitlabhq/gitlabhq/pull/1719
+
+# gitolite v2
+sudo -u git -H sed -i 's/\(GL_GITCONFIG_KEYS\s*=>*\s*\).\{2\}/\\1"\.\*"/g' /home/git/.gitolite.rc
+
+# gitlite v3
+sudo -u git -H sed -i "s/\(GIT_CONFIG_KEYS\s*=>*\s*\).\{2\}/\\1'\.\*'/g" /home/git/.gitolite.rc
+
+
+# Check app status
+sudo -u gitlab bundle exec rake gitlab:app:status RAILS_ENV=production
+
+
+```
+
+
+### 3. Start all
+
+    sudo service gitlab start
diff --git a/doc/update/2.9-to-3.0.md b/doc/update/2.9-to-3.0.md
new file mode 100644
index 0000000000000000000000000000000000000000..af929e027a405a0ca9425f5c895f337e7c1a1897
--- /dev/null
+++ b/doc/update/2.9-to-3.0.md
@@ -0,0 +1,37 @@
+# From 2.9 to 3.0
+
+### 1. Stop server & resque
+
+    sudo service gitlab stop
+
+### 2. Follow instructions
+
+```bash
+
+# Get latest code
+sudo -u gitlab -H git fetch origin
+sudo -u gitlab -H git checkout v3.0.3
+
+# Install gems
+sudo -u gitlab -H bundle install --without development test postgres
+
+# Migrate db
+sudo -u gitlab -H bundle exec rake db:migrate RAILS_ENV=production
+
+# Make some changes to gitolite v3 config
+# For more information visit https://github.com/gitlabhq/gitlabhq/pull/1719
+
+# Gitolite version 3
+sudo -u git -H sed -i "s/\(GIT_CONFIG_KEYS\s*=>*\s*\).\{2\}/\\1'\.\*'/g" /home/git/.gitolite.rc
+
+# If you still use gitolite v2
+sudo -u git -H sed -i 's/\(GL_GITCONFIG_KEYS\s*=>*\s*\).\{2\}/\\1"\.\*"/g' /home/git/.gitolite.rc
+
+# Check APP Status
+sudo -u gitlab -H bundle exec rake gitlab:app:status RAILS_ENV=production
+```
+
+
+### 3. Start all
+
+    sudo service gitlab start
diff --git a/doc/update/3.0-to-3.1.md b/doc/update/3.0-to-3.1.md
new file mode 100644
index 0000000000000000000000000000000000000000..5f06f818d101e1544690e47e5e2470920e2b6000
--- /dev/null
+++ b/doc/update/3.0-to-3.1.md
@@ -0,0 +1,108 @@
+# From 3.0 to 3.1
+
+__IMPORTANT!__
+
+In this release __we moved Resque jobs under own gitlab namespace__.
+
+Despite a lot of advantages it requires from our users to __replace gitolite post-receive hook with new one__.
+
+Most of projects has post-receive file as symlink to gitolite `/home/git/.gitolite/hooks/post-receive`.
+But some of them may have a real file. In this case you should rewrite it with symlink to gitolite hook.
+
+I wrote a bash script which will do it automatically for you. Just make sure all path inside is valid for you
+
+- - -
+
+### 1. Stop server & resque
+
+    sudo service gitlab stop
+
+### 2. Update GitLab
+
+```bash
+
+# Get latest code
+sudo -u gitlab -H git fetch
+sudo -u gitlab -H git checkout v3.1.0
+
+# Install new charlock_holmes
+sudo gem install charlock_holmes --version '0.6.9'
+
+# Install gems for MySQL
+sudo -u gitlab -H bundle install --without development test postgres sqlite
+
+
+# Migrate db
+sudo -u gitlab -H bundle exec rake db:migrate RAILS_ENV=production
+
+
+```
+
+### 3. Update post-receive hooks
+
+#### Gitolite 3
+
+Step 1: Rewrite post-receive hook
+
+```bash
+# Rewrite hook for gitolite 3
+sudo cp ./lib/hooks/post-receive /home/git/.gitolite/hooks/common/post-receive
+sudo chown git:git /home/git/.gitolite/hooks/common/post-receive
+```
+
+Step 2: Rewrite hooks in all projects to symlink gitolite hook
+
+```bash
+# 1. Check for valid path
+sudo -u gitlab -H vim lib/support/rewrite-hooks.sh
+
+# 2. Run script
+sudo -u git -H lib/support/rewrite-hooks.sh
+```
+
+#### Gitolite v2
+
+Step 1: rewrite post-receive hook for gitolite 2
+
+```
+sudo cp ./lib/hooks/post-receive /home/git/share/gitolite/hooks/common/post-receive
+sudo chown git:git /home/git/share/gitolite/hooks/common/post-receive
+```
+
+Step 2: Replace symlinks in project to valid place
+
+
+    #!/bin/bash
+    src="/home/git/repositories"
+    for dir in `ls "$src/"`
+    do
+      if [ -d "$src/$dir" ]; then
+
+        if [ "$dir" = "gitolite-admin.git" ]
+        then
+          continue
+        fi
+
+        project_hook="$src/$dir/hooks/post-receive"
+        gitolite_hook="/home/git/share/gitolite/hooks/common/post-receive"
+
+        ln -s -f $gitolite_hook $project_hook
+      fi
+    done
+
+
+### 4. Check app status
+
+```bash
+
+# Check APP Status
+sudo -u gitlab -H bundle exec rake gitlab:app:status RAILS_ENV=production
+
+
+
+```
+
+
+### 5. Start all
+
+    sudo service gitlab start
diff --git a/doc/update/3.1-to-4.0.md b/doc/update/3.1-to-4.0.md
new file mode 100644
index 0000000000000000000000000000000000000000..c5ae3a40a76347df0875c23870bc0cb84afa4c0f
--- /dev/null
+++ b/doc/update/3.1-to-4.0.md
@@ -0,0 +1,99 @@
+# From 3.1 to 4.0
+
+## Important changes
+
+* Support for SQLite was dropped
+* Support for gitolite 2 was dropped
+* Projects are organized in namespaces
+* The GitLab post-receive hook needs to be updated
+* The configuration file needs to be updated
+* Availability of `python2` executable
+
+Most of projects has post-receive file as symlink to gitolite `/home/git/.gitolite/hooks/post-receive`.
+But some of them may have a real file. In this case you should rewrite it with symlink to gitolite hook.
+
+I wrote a bash script which will do it automatically for you. Just make sure all path inside is valid for you
+
+- - -
+
+### 1. Stop GitLab & Resque
+
+    sudo service gitlab stop
+
+### 2. Update GitLab
+
+```bash
+
+# Get latest code
+sudo -u gitlab -H git fetch
+sudo -u gitlab -H git checkout 4-0-stable
+
+# Install gems for MySQL
+sudo -u gitlab -H bundle install --without development test postgres
+
+# Update repos permissions
+sudo chmod -R ug+rwXs /home/git/repositories/
+sudo chown -R git:git /home/git/repositories/
+
+# Migrate db
+sudo -u gitlab -H bundle exec rake db:migrate RAILS_ENV=production
+
+# Enable namespaces (**Warning!** All projects in groups will be moved to subdirectories)
+sudo -u gitlab -H bundle exec rake gitlab:enable_namespaces RAILS_ENV=production
+
+```
+
+### 3. Update post-receive hooks  (Requires gitolite v3 )
+
+
+Step 1: Rewrite post-receive hook
+
+```bash
+sudo cp ./lib/hooks/post-receive /home/git/.gitolite/hooks/common/post-receive
+sudo chown git:git /home/git/.gitolite/hooks/common/post-receive
+```
+
+Step 2: Update project hooks to be symlinks to the Gitolite hook
+
+```bash
+# 1. Check paths in script
+sudo -u gitlab -H vim lib/support/rewrite-hooks.sh
+
+# 2. Run script
+sudo -u git -H lib/support/rewrite-hooks.sh
+```
+
+
+### 4. Replace config with new one
+
+
+    # backup old one
+    sudo -u gitlab -H cp config/gitlab.yml config/gitlab.yml.old
+
+    # copy new one
+    sudo -u gitlab -H cp config/gitlab.yml.example config/gitlab.yml
+
+    # edit it
+    sudo -u gitlab -H vim config/gitlab.yml
+
+
+### 5. Disable ssh known_host check for own domain
+
+
+    echo "Host localhost
+       StrictHostKeyChecking no
+       UserKnownHostsFile=/dev/null" | sudo tee -a /etc/ssh/ssh_config
+
+    echo "Host YOUR_DOMAIN_NAME
+       StrictHostKeyChecking no
+       UserKnownHostsFile=/dev/null" | sudo tee -a /etc/ssh/ssh_config
+
+
+### 6. Check GitLab's status
+
+    sudo -u gitlab -H bundle exec rake gitlab:check RAILS_ENV=production
+
+
+### 7. Start GitLab & Resque
+
+    sudo service gitlab start
diff --git a/doc/update/4.0-to-4.1.md b/doc/update/4.0-to-4.1.md
new file mode 100644
index 0000000000000000000000000000000000000000..368351d0c91d2fddc6317973c26fae4e755feba2
--- /dev/null
+++ b/doc/update/4.0-to-4.1.md
@@ -0,0 +1,55 @@
+# From 4.0 to 4.1
+
+## Important changes
+
+* Resque replaced with Sidekiq
+* New options for configuration file added
+* Init.d script should be updated
+* __requires ruby1.9.3-p327__
+
+- - -
+
+### 1. Stop GitLab & Resque
+
+    sudo service gitlab stop
+
+### 2. Update GitLab
+
+```bash
+
+# Get latest code
+sudo -u gitlab -H git fetch
+sudo -u gitlab -H git checkout 4-1-stable
+
+# Install gems for MySQL
+sudo -u gitlab -H bundle install --without development test postgres
+
+# Migrate db
+sudo -u gitlab -H bundle exec rake db:migrate RAILS_ENV=production
+
+```
+
+### 3. Replace init.d script with a new one
+
+```
+# backup old one
+sudo mv /etc/init.d/gitlab /etc/init.d/gitlab.old
+
+# get new one usign sidekiq
+sudo curl --output /etc/init.d/gitlab https://raw.github.com/gitlabhq/gitlab-recipes/4-1-stable/init.d/gitlab
+sudo chmod +x /etc/init.d/gitlab
+
+```
+
+### 4. Check GitLab's status
+
+    sudo -u gitlab -H bundle exec rake gitlab:check RAILS_ENV=production
+
+
+### 5. Start GitLab & Sidekiq
+
+    sudo service gitlab start
+
+### 6. Remove old init.d script
+
+    sudo rm /etc/init.d/gitlab.old
diff --git a/doc/update/4.1-to-4.2.md b/doc/update/4.1-to-4.2.md
new file mode 100644
index 0000000000000000000000000000000000000000..15fea59356036d319af5cdf0438a7a5a39237f83
--- /dev/null
+++ b/doc/update/4.1-to-4.2.md
@@ -0,0 +1,34 @@
+# From 4.1 to 4.2
+
+### 1. Stop server & resque
+
+    sudo service gitlab stop
+
+### 2. Update code & db
+
+```bash
+# Get latest code
+sudo -u gitlab git fetch
+
+sudo -u gitlab git checkout 4-2-stable
+
+# Install libs
+sudo -u gitlab bundle install --without development test postgres --deployment
+
+# update db
+sudo -u gitlab bundle exec rake db:migrate RAILS_ENV=production
+
+```
+
+
+### 3. Check GitLab's status
+
+```bash
+sudo -u gitlab -H bundle exec rake gitlab:check RAILS_ENV=production
+```
+
+
+
+### 4. Start all
+
+    sudo service gitlab start