$ a2enmod cgid alias env

$ sudo mkdir /var/www/your_domain/repo
$ cd /var/www/your_domain/repo
$ mkdir your_repo.git
$ cd your_repo.git
$ git init --bare
$ git update-server-info
$ sudo chown www-data:www-data -R /var/www/your_domain/repo/your_repo.git

$ sudo vim /etc/apache2/sites-available/your_domain.conf
<VirtualHost *:443>
  ServerAdmin webadmin@localhost
  ServerName your_domain
  DocumentRoot /var/www/your_domain/
  ErrorLog ${APACHE_LOG_DIR}/error.log
  CustomLog ${APACHE_LOG_DIR}/access.log combined
  <Directory "/var/www/your_domain/repo">
    AuthType Basic
    AuthName "Restricted Content"
    AuthUserFile /var/www/your_domain/.htpasswd
    Require valid-user
  </Directory>
  #GIT
  SetEnv GIT_PROJECT_ROOT /var/www/your_domain/repo
  SetEnv GIT_HTTP_EXPORT_ALL
  ScriptAlias /repo/ /usr/lib/git-core/git-http-backend/
  <Files "git-http-backend">
    AuthType Basic
    AuthName "Git Access"
    AuthUserFile /var/www/your_domain/.htpasswd
    Require valid-user
  </Files>
  <LocationMatch "^/.*/git-upload-pack$">
    AuthType Basic
    AuthName "Git Access"
    AuthUserFile /var/www/your_domain/.htpasswd
    Require valid-user
  </LocationMatch>
</VirtualHost>