$ 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>