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.6+
- Git 2.8+ (with stored credentials)
Install this tool globally:
$ pip 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/gitman
sources:
  - name: framework
    repo: https://github.com/kstenerud/iOS-Universal-Framework
    rev: Mk5-end-of-life
  - name: coverage
    repo: https://github.com/jonreid/XcodeCoverage
    rev: master
    link: Tools/XcodeCoverage
  - name: trufflehog
    repo: https://github.com/dxa4481/truffleHog
    rev: master
    scripts:
      - chmod a+x truffleHog/truffleHog.py
  - name: fontawesome
    repo: https://github.com/FortAwesome/Font-Awesome
    sparse_paths:
      - "webfonts/*"
    rev: master
  - name: material-design-icons
    repo: https://github.com/google/material-design-icons.git
    rev: master
groups:
  - name: code
    members:
      - framework
      - trufflehog
  - name: resources
    members:
      - fontawesome
      - material-design-iconsIgnore 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 certain dependencies or even dependency groups:
- Update a single repository
$ gitman update framework- Update a dependency group
$ gitman update resourcesDisplay the specific revisions that are currently installed:
$ gitman listReinstall these specific versions at a later time:
$ gitman installRemove all installed dependencies:
$ gitman uninstall