{"id":17225986,"url":"https://github.com/jacebrowning/gitman","last_synced_at":"2025-05-15T06:02:23.755Z","repository":{"id":27160232,"uuid":"30629582","full_name":"jacebrowning/gitman","owner":"jacebrowning","description":"Language-agnostic dependency manager using Git.","archived":false,"fork":false,"pushed_at":"2025-04-23T13:31:20.000Z","size":33931,"stargazers_count":208,"open_issues_count":25,"forks_count":33,"subscribers_count":7,"default_branch":"main","last_synced_at":"2025-04-23T14:25:36.835Z","etag":null,"topics":["command-line","dependency-manager","git","version-control"],"latest_commit_sha":null,"homepage":"https://gitman.readthedocs.io","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jacebrowning.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null},"funding":{"github":"jacebrowning"}},"created_at":"2015-02-11T03:55:12.000Z","updated_at":"2025-04-23T13:31:22.000Z","dependencies_parsed_at":"2024-05-27T20:59:19.323Z","dependency_job_id":"e27508e8-82a8-42b2-8f01-16e231eaab38","html_url":"https://github.com/jacebrowning/gitman","commit_stats":{"total_commits":644,"total_committers":27,"mean_commits":23.85185185185185,"dds":"0.23913043478260865","last_synced_commit":"2018c4097fda3f34a7392657608d79d108dfe989"},"previous_names":[],"tags_count":50,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jacebrowning%2Fgitman","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jacebrowning%2Fgitman/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jacebrowning%2Fgitman/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jacebrowning%2Fgitman/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jacebrowning","download_url":"https://codeload.github.com/jacebrowning/gitman/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254283336,"owners_count":22045140,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["command-line","dependency-manager","git","version-control"],"created_at":"2024-10-15T04:14:58.180Z","updated_at":"2025-05-15T06:02:23.701Z","avatar_url":"https://github.com/jacebrowning.png","language":"Python","funding_links":["https://github.com/sponsors/jacebrowning"],"categories":[],"sub_categories":[],"readme":"## Overview\n\nGitman is a language-agnostic dependency manager using Git. It aims to serve as a submodules replacement and provides advanced options for managing versions of nested Git repositories.\n\n[![Demo](https://raw.githubusercontent.com/jacebrowning/gitman/main/docs/demo.gif)](https://asciinema.org/a/3DLos4HIU84P0AfFlZMYcgPus)\n\n[![Linux Build](https://img.shields.io/github/actions/workflow/status/jacebrowning/gitman/main.yml?branch=main\u0026label=linux)](https://github.com/jacebrowning/gitman/actions)\n[![Windows Build](https://img.shields.io/appveyor/ci/jacebrowning/gitman/main.svg?label=windows)](https://ci.appveyor.com/project/jacebrowning/gitman)\n[![Code Coverage](https://img.shields.io/codecov/c/github/jacebrowning/gitman)\n](https://codecov.io/gh/jacebrowning/gitman)\n[![Code Quality](https://img.shields.io/scrutinizer/g/jacebrowning/gitman.svg?label=quality)](https://scrutinizer-ci.com/g/jacebrowning/gitman/?branch=main)\n[![PyPI License](https://img.shields.io/pypi/l/gitman.svg)](https://pypi.org/project/gitman)\n[![PyPI Version](https://img.shields.io/pypi/v/gitman.svg?label=version)](https://pypi.org/project/gitman)\n[![PyPI Downloads](https://img.shields.io/pypi/dm/gitman.svg?color=orange)](https://pypistats.org/packages/gitman)\n\n## Setup\n\n### Requirements\n\n- Python 3.8+\n- Git 2.8+ (with [stored credentials](http://gitman.readthedocs.io/en/latest/setup/git/))\n\n### Installation\n\nInstall this tool globally with [pipx](https://pipxproject.github.io/pipx/) (or pip):\n\n```sh\n$ pipx install gitman\n```\nor add it to your [Poetry](https://python-poetry.org/docs/) project:\n\n```sh\n$ poetry add gitman\n```\n\n### Configuration\n\nGenerate a sample config file:\n\n```sh\n$ gitman init\n```\n\nor manually create one (`gitman.yml` or `.gitman.yml`) in the root of your working tree:\n\n```yaml\nlocation: vendor/gitman\n\nsources:\n  - repo: \"https://github.com/kstenerud/iOS-Universal-Framework\"\n    name: framework\n    rev: Mk5-end-of-life\n  - repo: \"https://github.com/jonreid/XcodeCoverage\"\n    name: coverage\n    links:\n      - target: Tools/XcodeCoverage\n  - repo: \"https://github.com/dxa4481/truffleHog\"\n    name: trufflehog\n    rev: master\n    scripts:\n      - chmod a+x truffleHog/truffleHog.py\n  - repo: \"https://github.com/FortAwesome/Font-Awesome\"\n    name: fontawesome\n    rev: master\n    sparse_paths:\n      - \"webfonts/*\"\n  - repo: \"https://github.com/google/material-design-icons\"\n    name: material-design-icons\n    rev: master\n\ngroups:\n  - name: code\n    members:\n      - framework\n      - trufflehog\n  - name: resources\n    members:\n      - fontawesome\n      - material-design-icons\n\ndefault_group: code\n```\n\nIgnore the dependency storage location:\n\n```sh\n$ echo vendor/gitman \u003e\u003e .gitignore\n```\n\n## Usage\n\nSee the available commands:\n\n```sh\n$ gitman --help\n```\n\n### Updating Dependencies\n\nGet the latest versions of all dependencies:\n\n```sh\n$ gitman update\n```\n\nwhich will essentially:\n\n1. Create a working tree at `\u003croot\u003e`/`\u003clocation\u003e`/`\u003cname\u003e`\n2. Fetch from `repo` and checkout the specified `rev`\n3. Symbolically link each `\u003clocation\u003e`/`\u003cname\u003e` from `\u003croot\u003e`/`\u003clink\u003e` (if specified)\n4. Repeat for all nested working trees containing a config file\n5. Record the actual commit SHAs that were checked out (with `--lock` option)\n6. Run optional post-install scripts for each dependency\n\nwhere `rev` can be:\n\n- all or part of a commit SHA: `123def`\n- a tag: `v1.0`\n- a branch: `main`\n- a `rev-parse` date: `'main@{2015-06-18 10:30:59}'`\n\nAlternatively, get the latest versions of specific dependencies:\n\n```sh\n$ gitman update framework\n```\n\nor named groups:\n\n```sh\n$ gitman update resources\n```\n\n### Restoring Previous Versions\n\nDisplay the versions that are currently installed:\n\n```sh\n$ gitman list\n```\n\nReinstall these specific versions at a later time:\n\n```sh\n$ gitman install\n```\n\n### Deleting Dependencies\n\nRemove all installed dependencies:\n\n```sh\n$ gitman uninstall\n```\n\n## Resources\n\n- [Source code](https://github.com/jacebrowning/gitman)\n- [Issue tracker](https://github.com/jacebrowning/gitman/issues)\n- [Release history](https://github.com/jacebrowning/gitman/blob/main/CHANGELOG.md)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjacebrowning%2Fgitman","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjacebrowning%2Fgitman","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjacebrowning%2Fgitman/lists"}