{"adoption": {"forks": 306, "observed_at": "2026-08-28T04:07:06.724302+00:00", "stars": 2645}, "canonical_url": "https://ross.abutalabs.com/products/git-dumper", "card": {"archived": false, "artifact_type": "cli-tool", "description": "A tool to dump a git repository from a website", "domain": ["security", "penetration-testing", "developer-tools"], "enriched": true, "function": ["security", "http-client", "cli", "version-control"], "health_score": 85, "homepage": null, "language": "Python", "license": "MIT", "license_family": "permissive", "maturity": "stable", "member_repos": ["arthaud/git-dumper"], "name": "arthaud/git-dumper", "platform": ["python", "cli", "windows", "cross-platform"], "pushed_at": "2026-07-09T17:31:17+00:00", "repo": "arthaud/git-dumper", "stars": 2645, "tags": ["git-dumping", "offensive-security", "ctf", "vulnerability-assessment", "web-security", "command-line", "linux", "macos"], "topics": ["git", "security", "web"], "urls": [], "use_cases": ["dump a git repository exposed on a website", "recover source code from a misconfigured web server with a public .git folder", "exploit exposed .git directories during a penetration test", "solve CTF challenges involving leaked git repositories", "download a git repo when directory listing is disabled", "audit whether my website accidentally exposes its .git directory"], "what_it_is": "git-dumper is a Python CLI tool that reconstructs a full git repository from a website that exposes its .git directory, even when directory listing is disabled. It recursively discovers refs and objects via HTTP requests and runs git checkout to recover the working tree.", "when_to_avoid": ["you just want to clone a repository normally over git/https protocols", "the .git directory is not exposed or the server blocks access to it", "you need a GUI or a fully automated continuous scanning solution rather than a one-shot dumping tool"], "when_to_choose": ["you found an exposed .git directory on a target site and want to reconstruct the full repository", "you need a fast, scriptable CLI with proxy, header, and client-certificate support for dumping git data", "you are doing CTF or pentest work involving git source disclosure"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/git-dumper", "repo": "arthaud/git-dumper", "role": "main", "score": 64}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:07:06.724302+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T02:18:59.528837+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "b18402eed4e1c0715cd664cf53d82886002a26056b5fd5a7b4bd17c13fa4ab5c", "fetched_at": "2026-08-28T04:07:06.724302+00:00", "kind": "readme", "missing": false, "url": "https://github.com/arthaud/git-dumper"}, {"content_hash": "131df3c996461d265a40d8b7bf5784077cbe26b129cdfa0e5f7f6a51072264f4", "fetched_at": "2026-08-29T10:01:47.921194+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/git-dumper/json"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:07:06.724302+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T02:18:59.528837+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "b18402eed4e1c0715cd664cf53d82886002a26056b5fd5a7b4bd17c13fa4ab5c", "fetched_at": "2026-08-28T04:07:06.724302+00:00", "kind": "readme", "missing": false, "url": "https://github.com/arthaud/git-dumper"}, {"content_hash": "131df3c996461d265a40d8b7bf5784077cbe26b129cdfa0e5f7f6a51072264f4", "fetched_at": "2026-08-29T10:01:47.921194+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/git-dumper/json"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T02:18:59.528837+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "b18402eed4e1c0715cd664cf53d82886002a26056b5fd5a7b4bd17c13fa4ab5c", "fetched_at": "2026-08-28T04:07:06.724302+00:00", "kind": "readme", "missing": false, "url": "https://github.com/arthaud/git-dumper"}, {"content_hash": "131df3c996461d265a40d8b7bf5784077cbe26b129cdfa0e5f7f6a51072264f4", "fetched_at": "2026-08-29T10:01:47.921194+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/git-dumper/json"}], "taxonomy_version": 1}, "health_score": {"inputs": ["days_since_push", "days_since_release", "archived"], "kind": "computed", "method": "health_v1"}, "homepage": {"kind": "observed", "observed_at": "2026-08-28T04:07:06.724302+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:07:06.724302+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:07:06.724302+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T02:18:59.528837+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "b18402eed4e1c0715cd664cf53d82886002a26056b5fd5a7b4bd17c13fa4ab5c", "fetched_at": "2026-08-28T04:07:06.724302+00:00", "kind": "readme", "missing": false, "url": "https://github.com/arthaud/git-dumper"}, {"content_hash": "131df3c996461d265a40d8b7bf5784077cbe26b129cdfa0e5f7f6a51072264f4", "fetched_at": "2026-08-29T10:01:47.921194+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/git-dumper/json"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:07:06.724302+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:07:06.724302+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T02:18:59.528837+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "b18402eed4e1c0715cd664cf53d82886002a26056b5fd5a7b4bd17c13fa4ab5c", "fetched_at": "2026-08-28T04:07:06.724302+00:00", "kind": "readme", "missing": false, "url": "https://github.com/arthaud/git-dumper"}, {"content_hash": "131df3c996461d265a40d8b7bf5784077cbe26b129cdfa0e5f7f6a51072264f4", "fetched_at": "2026-08-29T10:01:47.921194+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/git-dumper/json"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:07:06.724302+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:07:06.724302+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:07:06.724302+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T02:18:59.528837+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "b18402eed4e1c0715cd664cf53d82886002a26056b5fd5a7b4bd17c13fa4ab5c", "fetched_at": "2026-08-28T04:07:06.724302+00:00", "kind": "readme", "missing": false, "url": "https://github.com/arthaud/git-dumper"}, {"content_hash": "131df3c996461d265a40d8b7bf5784077cbe26b129cdfa0e5f7f6a51072264f4", "fetched_at": "2026-08-29T10:01:47.921194+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/git-dumper/json"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:07:06.724302+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:07:06.724302+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T02:18:59.528837+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "b18402eed4e1c0715cd664cf53d82886002a26056b5fd5a7b4bd17c13fa4ab5c", "fetched_at": "2026-08-28T04:07:06.724302+00:00", "kind": "readme", "missing": false, "url": "https://github.com/arthaud/git-dumper"}, {"content_hash": "131df3c996461d265a40d8b7bf5784077cbe26b129cdfa0e5f7f6a51072264f4", "fetched_at": "2026-08-29T10:01:47.921194+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/git-dumper/json"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T02:18:59.528837+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "b18402eed4e1c0715cd664cf53d82886002a26056b5fd5a7b4bd17c13fa4ab5c", "fetched_at": "2026-08-28T04:07:06.724302+00:00", "kind": "readme", "missing": false, "url": "https://github.com/arthaud/git-dumper"}, {"content_hash": "131df3c996461d265a40d8b7bf5784077cbe26b129cdfa0e5f7f6a51072264f4", "fetched_at": "2026-08-29T10:01:47.921194+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/git-dumper/json"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T02:18:59.528837+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "b18402eed4e1c0715cd664cf53d82886002a26056b5fd5a7b4bd17c13fa4ab5c", "fetched_at": "2026-08-28T04:07:06.724302+00:00", "kind": "readme", "missing": false, "url": "https://github.com/arthaud/git-dumper"}, {"content_hash": "131df3c996461d265a40d8b7bf5784077cbe26b129cdfa0e5f7f6a51072264f4", "fetched_at": "2026-08-29T10:01:47.921194+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/git-dumper/json"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T02:18:59.528837+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "b18402eed4e1c0715cd664cf53d82886002a26056b5fd5a7b4bd17c13fa4ab5c", "fetched_at": "2026-08-28T04:07:06.724302+00:00", "kind": "readme", "missing": false, "url": "https://github.com/arthaud/git-dumper"}, {"content_hash": "131df3c996461d265a40d8b7bf5784077cbe26b129cdfa0e5f7f6a51072264f4", "fetched_at": "2026-08-29T10:01:47.921194+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/git-dumper/json"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 91, "longevity": 100, "rhythm": 8}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": [], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 3442, "days_push": 55, "days_rel": 648, "gap_med": null, "n_releases_24m": 1}, "score": 64, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}