You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Maxime Arthaud 52cbe7d739
Merge pull request #1 from pdparchitect/master
1 year ago
.gitignore Initial commit 2 years ago
LICENSE Initial commit 2 years ago
README.md Update README.md 2 years ago
git-dumper.py Disable TLS verification. 1 year ago
requirements.txt Use python dulwich 2 years ago

README.md

git-dumper

A tool to dump a git repository from a website.

Usage

usage: git-dumper.py [options] URL DIR

Dump a git repository from a website.

positional arguments:
  URL                   url
  DIR                   output directory

optional arguments:
  -h, --help            show this help message and exit
  --proxy PROXY         use the specified proxy
  -j JOBS, --jobs JOBS  number of simultaneous requests
  -r RETRY, --retry RETRY
                        number of request attempts before giving up
  -t TIMEOUT, --timeout TIMEOUT
                        maximum time in seconds before giving up

Example

./git-dumper.py http://website.com/.git ~/website

Install the dependencies

pip install -r requirements.txt

How does it work?

The tool will first check if directory listing is available. It it is, then it will just recursively download the .git directory (what you would do with wget).

If directory listing is not available, it will use several methods to find as many files as possible. Step by step, git-dumper will:

  • Fetch all common files (.gitignore, .git/HEAD, .git/index, etc.);
  • Find as many refs as possible (such as refs/heads/master, refs/remotes/origin/HEAD, etc.) by analyzing .git/HEAD, .git/logs/HEAD, .git/config, .git/packed-refs and so on;
  • Find as many objects (sha1) as possible by analyzing .git/packed-refs, .git/index, .git/refs/* and .git/logs/*;
  • Fetch all objects recursively, analyzing each commits to find their parents;
  • Run git checkout . to recover the current working tree