Overview
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.
Setup
Requirements
- Python 3.6+
- Git 2.8+ (with stored credentials)
Installation
Install this tool globally:
1 | $ pip install gitman |
or add it to your Poetry project:
1 | $ poetry add gitman |
Configuration
Generate a sample config file:
1 | $ gitman init |
or manually create one (gitman.yml
or .gitman.yml
) in the root of your working tree:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | 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-icons |
Ignore the dependency storage location:
1 | $ echo vendor/gitman >> .gitignore
|
Usage
See the available commands:
1 | $ gitman --help |
Updating Dependencies
Get the latest versions of all dependencies:
1 | $ gitman update |
which will essentially:
- Create a working tree at
<root>
/<location>
/<name>
- Fetch from
repo
and 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
--lock
option) - 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:
master
- a
rev-parse
date:'develop@{2015-06-18 10:30:59}'
Alternatively get the latest versions of certain dependencies or even dependency groups:
- Update a single repository
1 | $ gitman update framework |
- Update a dependency group
1 | $ gitman update resources |
Restoring Previous Versions
Display the specific revisions that are currently installed:
1 | $ gitman list |
Reinstall these specific versions at a later time:
1 | $ gitman install |
Deleting Dependencies
Remove all installed dependencies:
1 | $ gitman uninstall |