Gitman 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.
- Python 3.10+
- Git 2.8+ (with stored credentials)
Install this tool globally with pipx (or pip):
$ pipx install gitmanor add it to your Poetry project:
$ poetry add gitmanGenerate a sample config file:
$ gitman initor manually create one (gitman.yml or .gitman.yml) in the root of your working tree:
location: vendor/gitmansources:
- repo: "https://github.com/kstenerud/iOS-Universal-Framework"name: frameworkrev: Mk5-end-of-life
- repo: "https://github.com/jonreid/XcodeCoverage"name: coveragelinks:
- target: Tools/XcodeCoverage
- repo: "https://github.com/dxa4481/truffleHog"name: trufflehogrev: masterscripts:
- chmod a+x truffleHog/truffleHog.py
- repo: "https://github.com/FortAwesome/Font-Awesome"name: fontawesomerev: mastersparse_paths:
- "webfonts/*"
- repo: "https://github.com/google/material-design-icons"name: material-design-iconsrev: mastergroups:
- name: codemembers:
- framework
- trufflehog
- name: resourcesmembers:
- fontawesome
- material-design-iconsdefault_group: codeIgnore the dependency storage location:
$ echo vendor/gitman >> .gitignoreSee the available commands:
$ gitman --helpGet the latest versions of all dependencies:
$ gitman updatewhich will essentially:
- Create a working tree at
<root>/<location>/<name> - Fetch from
repoand checkout the specifiedrev - Symbolically link each
<location>/<name>from<root>/<link>(if specified) - Repeat for all nested working trees containing a config file
- Record the actual commit SHAs that were checked out (with
--lockoption) - Run optional post-install scripts for each dependency
where rev can be:
- all or part of a commit SHA:
123def - a tag:
v1.0 - a branch:
main - a
rev-parsedate:'main@{2015-06-18 10:30:59}'
Alternatively, get the latest versions of specific dependencies:
$ gitman update frameworkor named groups:
$ gitman update resourcesDisplay the versions that are currently installed:
$ gitman listReinstall these specific versions at a later time:
$ gitman installRemove all installed dependencies:
$ gitman uninstall