Using multiple remote repositories with Git | David Murphy

Something I am using for some of my projects:

Using multiple remote repositories with Git | David Murphy.

Still most of the time I prefer to use a private GitLab repo until I decide I can show the modifications to the world on GitHub.

Ignoring files · GitHub Help

Sometimes I need to have a different app configuration when running the same app under different environments.

The best way for me while working both with a local Vagrant configuration and a custom configured production environments is to use:

git update-index --assume-unchanged path/to/file.txt

The full information can be found here: Ignoring files · GitHub Help.

Don’t put the config files in .gitignore, just change them locally and update-index. If there is a newer version of the file coming from the remote repo, you will be notified and will not miss update.

GitWeb theme and improvements from kogakure/gitweb-theme

For the full documentation go here: kogakure/gitweb-theme @ GitHub.

This is a GitHub like theme for GitWeb.

To install it execute the following:

git clone https://github.com/kogakure/gitweb-theme.git
cd gitweb-theme/
./setup -vi --install

This is the log I’ve had with a successfull install:

./setup -vi --install
./setup: [NOTICE] - Target not set, using default path: '/usr/share/gitweb'
./setup:
./setup: Is this ok? [y] | [n] : t./setup: Is this ok? [y] | [n] : y
./setup:
./setup: Backing up original files, continue? [y] | [n] : y
./setup:
./setup: Backing up...
./setup:
'/usr/share/gitweb/static/gitweb.css' -> '/usr/share/gitweb/static/gitweb.css.bak'
'/usr/share/gitweb/static/git-favicon.png' -> '/usr/share/gitweb/static/git-favicon.png.bak'
'/usr/share/gitweb/static/git-logo.png' -> '/usr/share/gitweb/static/git-logo.png.bak'
./setup:
./setup: ...done
./setup:
./setup: Linking theme files, continue? [y] | [n] : y
./setup:
./setup: Linking...
./setup:
'/usr/share/gitweb/static/gitweb.css' -> '/root/gitweb-theme/gitweb.css'
'/usr/share/gitweb/static/git-favicon.png' -> '/root/gitweb-theme/git-favicon.png'
'/usr/share/gitweb/static/git-logo.png' -> '/root/gitweb-theme/git-logo.png'
./setup:
./setup: ...done
./setup:
./setup: [NOTICE] - Installation complete!

Install the syntax highlighting feature:

Under Ubuntu:

apt-get install highlight

and then put this line in /etc/gitweb.conf:

$feature{'highlight'}{'default'} = [1];

For Gravatar support in GitWeb put this line in /etc/gitweb.conf:

$feature{'avatar'}{'default'} = ['gravatar'];

If it doesn’t work for you, you have to manually replace the css, logo and favicon files or edit /etc/gitweb.conf and change the paths to point to the new theme.

How to install and configure GitLab inside a Docker container: The Ready-Made Edition

Update: Please check the best Gitlab Docker container that I’ve found already a long time ago: https://github.com/sameersbn/docker-gitlab
Everything you need to set it up is on the page. I am using it and it does exactly what you expect it to do. You should read only the updates of this post. The alternative image from the original post is too old and we don’t need it anymore. Enjoy!

Update 2: And don’t forget to secure it with free HTTPS!

Update3: To help you start faster I’ve created an example configuration with the Docker image from the Update 1 link:

docker run –name=gitlab -d \
-e ‘DB_TYPE=mysql’ \
-e “DB_HOST=172.17.42.1”
-e “DB_NAME=gitlabhq_production”
-e “DB_USER=gitlab” -e “DB_PASS=yourpass” \
–link redis:redisio \
-v /home/yourusername/gitlab/data:/home/git/data \
-e “GITLAB_HOST=gitlab.yourdomain.com” \
-e “[email protected]
-e [email protected] \
-e “[email protected]” -e “SMTP_PASS=yoursmtppass” \
-e “GITLAB_BACKUPS=daily” \
-e “GITLAB_SHELL_SSH_PORT=2222” \
-e “GITLAB_HTTPS=true” \
-e “GOOGLE_ANALYTICS_ID=UA-xxxxxx-xx” \
-p 172.17.42.1:8080:80 -p 2222:22 \
sameersbn/gitlab:7.8.1

The IP used is the internal Docker network address. I assume that you want to put Gitlab behind a reverse proxy on the same host. You may change it to another internal IP for the DB connection option and also remove it from the port forwarding to have the web port(8080) visible from the outside on your domain.

This configuration needs a `redis` named container running and the Gitlab container will link to it. Also the HTTPS is enabled, google tracking added and at the end port 2222(used by git+ssh) is open for your domain.

You may decide to dedicate a host for Gitlab only. Then you will set it to use port 22 for SSH and 80/443 for web. Check Update 2 above to see a sample nginx configuration for HTTPS.


The original post:

For this we are going to use a ready-made configuration for building the image and easy configuring it from https://github.com/crashsystems/gitlab-docker

We will follow these procedures: https://github.com/crashsystems/gitlab-docker/tree/master with some additions for our specific example.

You have a couple of things to do. First download the configuration and use the Dockerfile inside to build the base image:

git clone https://github.com/crashsystems/gitlab-docker.git
cd gitlab-docker
docker build -t crashsystems/gitlab-docker .

Wait until it’s done and now it’s time to configure hostnames and passwords using the .yml and .sh files that came with the Dockerfile from the git clone:

nano config/gitlab.yml

Change the hostname with something like: mygit.yourdomain.com. I will also change the standard port number 22 of the gitlab shell to one non standard and available on the host: 22222. Later we’ll use this port in docker run to redirect incoming requests for gitlab from the host.

Next is the database password for the gitlab MySQL user:

nano config/database.yml

change:

password: "secure password"

with a good one.

Finally, change the server name in the nginx config file:

nano config/nginx

It should be mygit.yourdomain.com as the gitlab.yml configuration above.

Now you are going to start the container:

docker run -d -v /your/path/to/gitlab-docker:/srv/gitlab --name gitlab -p 172.17.42.1:82:80 -p 22222:22 crashsystems/gitlab-docker

This will use your local host’s directory for storing the gitlab files and the gitlab container will respond on ports 22222 for ssh git operations and the internal 82 which we are going to use with a proxy from a nginx server already running on port 80 on the host:

nano /etc/nano/sites-enabled/yourdomain.com
server {
    server_name mygit.yourdomain.com;
    location / {
        #you may like to have a basic auth on top of the gitlab's one:
        #auth_basic "Restricted";
        #auth_basic_user_file /your/path/to/.htpasswd;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_redirect off;
        proxy_read_timeout 300;
        proxy_pass http://172.17.42.1:82;
    }
}

Restart/reload nginx’s configuration:

/etc/init.d/nginx reload

Now go to mygit.yourdomain.com and the login page should be shown. Use these defaults:

user: [email protected]
pass: 5iveL!fe

Create a new project and you’ll see the url to the gitlab repo you’re going to use from now on is like:

git remote add origin ssh://[email protected]:22222/root/test-project.git

Add one or more public ssh keys in gitlab’s interface and start using it! 🙂