A git server implementation written in python.
Based off the amazing work by Stewart Park in this gist: https://gist.github.com/stewartpark/1b079dc0481c6213def9.
Features:
- Makes any git repository lying below the search_paths setting
available for
git clone
andgit push
via HTTP using basic authentication - Application defaults can be overridden by specifying a configuration file
Review etc/config.yaml for a sample data structure. - On-demand repos: If you attempt to push a non-existing repo to the server, it will be created
- Employs process threading via gunicorn
- Install from pypi.org:
pip install btgitserver
- Install directly from git repo:
pip install git+http://www.github.com/berttejeda/bert.gt-server.git
To get usage information and help: bt.git-server -h
These are the routes accepted by the script:
- '/<org_name>/<project_name>'
These routes mirror the directory structure under the git search path(s).
For now, the only authentication available is HTTP AUTH BASIC
As such, the default credentials are:
Username: git-user
Password: git-password
- Create a test org and repo:
cd ~
mkdir -p /tmp/repos/contoso/test
cd /tmp/repos/contoso/test
git init .
git checkout -b main
touch test_file.txt
git add .
git commit -m 'Initial Commit'
cd ~
bt.git-server -r /tmp/repos
Note: The --repo-search-paths/-r
cli option allows specifying
multiple, space-delimited search paths, e.g. bt.git-server -r /tmp/repos /tmp/repos2
- Launch the standalone git server
bt.git-server
You should see output similar to:
Running on http://0.0.0.0:5000/
- On client-side:
Try cloning the repo you just created via the supported routes:
e.g.
git clone http://git-user:git-password@127.0.0.1:5000/contoso/test
mkdir -p foo-bar
cd foo-bar
git init .
git remote add origin http://git-user:git-password@127.0.0.1:5000/contoso/foo-bar
git checkout -b main
touch test_file.txt
git add .
git commit -m 'Initial Commit'
git push --set-upstream origin $(git rev-parse --abbrev-ref HEAD)
For your convenience, a Dockerfile has been provided, so feel free to build your own containerized instance of this app, or use the pre-built docker image:
mkdir /tmp/repos
docker run -it --rm -p 5000:5000 \
-v /tmp/repos:/opt/git-server/repos \
berttejeda/git-server