Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/berttejeda/bert.git-server
Python implementation of a Git Server
https://github.com/berttejeda/bert.git-server
Last synced: 27 days ago
JSON representation
Python implementation of a Git Server
- Host: GitHub
- URL: https://github.com/berttejeda/bert.git-server
- Owner: berttejeda
- Created: 2023-06-27T12:47:24.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2024-05-29T21:09:04.000Z (8 months ago)
- Last Synced: 2024-12-07T19:04:32.523Z (about 1 month ago)
- Language: Python
- Size: 40 KB
- Stars: 1
- Watchers: 3
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
## Overview
A git server implementation written in python.
Based off the amazing work by Stewart Park in this gist: [https://gist.github.com/stewartpark/1b079dc0481c6213def9](https://gist.github.com/stewartpark/1b079dc0481c6213def9).
Features:
- Makes any git repository lying below the _search\_paths_ setting
available for `git clone` and `git push` via HTTP using basic authentication
- Application defaults can be overridden by specifying a configuration file
Review [etc/config.yaml](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](https://gunicorn.org/)## Installation
- Install from pypi.org: `pip install btgitserver`
- Install directly from git repo: `pip install git+http://www.github.com/berttejeda/bert.gt-server.git`## Usage
To get usage information and help: `bt.git-server -h`
### Clone paths
These are the routes accepted by the script:
- '//'
These routes mirror the directory structure under the git search path(s).
### Authentication
For now, the only authentication available is HTTP AUTH BASICAs such, the default credentials are:
Username: `git-user`
Password: `git-password`### Usage Examples
#### Clone a repo
* 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.
```bash
git clone http://git-user:[email protected]:5000/contoso/test
```#### Push an on-demand repo
```
mkdir -p foo-bar
cd foo-bar
git init .
git remote add origin http://git-user:[email protected]: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)
```## Docker
For your convenience, a [Dockerfile](Dockerfile) has been provided,
so feel free to build your own containerized instance of this app, or
use the pre-built docker image:```bash
mkdir /tmp/repos
docker run -it --rm -p 5000:5000 \
-v /tmp/repos:/opt/git-server/repos \
berttejeda/git-server
```