Skip to content

Cloudxtreme/emergency-git-server

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Emergency Git Server

A minimal, "single-serving" Git HTTP server for

  1. emergencies
  2. local, ad hoc experimentation
  3. Git education

Normal, everyday use is not recommended unless security and performance are non-issues. Requires a normal git installation.

There's really no need to git clone or pip install since this thing is a single file. See --help for available options like basic auth, create-on-clone, create-on-push, SSL/TLS, etc.

Example

Use case

Some VM or container in which SSH/NFS/SMB aren't desired and for which folder sharing or volume mapping aren't worth configuring

On the host:

laptop:~$ curl -L "$github_raw_url" | python3 - ./www &
Serving over port 8000 ...

On the client:

[my_vm]# git clone http://laptop.local:8000/repos/my_repo.git
Cloning ...
Some caveats
  1. Your network setup might require that you provide an IP address (likely of a virtual bridge) in place of localhost or laptop.local. Export that (or 0.0.0.0) as _HOST to the server's environment.
  2. The $GIT_DIR (.git folder or bare repo) being cloned must reside 2+ levels below the "document root" (~/www in the example above). If that's a problem, export _FIRST_CHILD_OK=1 or make a dummy tree and nest a link to the repo:

    ~/
    ├── www/
    │   └── repos/
    │       └── my_repo.git -> ../../my_repo/.git
    └── my_repo/
        └── .git/
  3. Non-bare repos must have the receive.denyCurrentBranch option set to updateInstead in order to receive updates (pushes) and update the working directory:

    >$ git config --add receive.denyCurrentBranch "updateInstead"

About

A minimal Git HTTP server

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 100.0%