A git clone wrapper that automatically uses --reference to save disk space and download time.
Contents
To install git-autoshare in a fancy way, we recommend using pipx.
After installing pipx
simply run:
$ pipx install git-autoshare
To upgrade git-autoshare at any time:
$ pipx upgrade git-autoshare
If you want git autoshare-clone
to be invoked transparently in place of git clone
,
create the following bash script, name it git
, and place it in your PATH
before /usr/bin/git
:
#!/bin/bash if [ "$1" == "clone" ] then shift /usr/bin/git autoshare-clone "$@" else /usr/bin/git "$@" fi
To configure it, create a file named git-autoshare/repos.yml
in your user configuration
directory (often ~/.config
on Linux). This file must have the following structre:
host: repo: orgs: - organization - ... private: (True|False) ...: ...:
It lists all git hosts, repositories, and organizations that are subject to the sharing of git objects. Here is an example:
github.com: odoo: orgs: - odoo - OCA enterprise: orgs: - odoo - acsone private: True mis-builder: # shortcut to provides organizations - OCA - acsone
Note the use of the private
option, used to force fetching using the ssh protocol.
It is also possible to use *
as a wildcard for repository name, to have
autoshare applied to all repos of some organizations:
github.com: "*": orgs: - odoo - OCA - acsone private: True
If configured like the example above, when you git clone the odoo or mis-builder repositories
from one of these github organizations, git autoshare-clone
will automatically insert the
--reference
option in the git clone command. For example:
$ git autoshare-clone https://github.com/odoo/odoo
will be transformed into:
$ /usr/bin/git clone --reference ~/.cache/git-autoshare/github.com/odoo https://github.com/odoo/odoo
Same as git autoshare-clone
command, you can add submodules with a
reference. for example:
$ git autoshare-submodule-add https://github.com/odoo/odoo ./odoo
will be transformed into:
$ /usr/bin/git submodule add --reference ~/.cache/git-autoshare/github.com/odoo https://github.com/odoo/odoo ./odoo
The autoshare-prefetch
command is mostly meant to be run in a cron job:
$ git autoshare-prefetch --quiet
will update the cache directory by fetching all repositories mentioned in repos.yml.
It can also prefetch one single repository, for example:
$ git autoshare-prefetch https://github.com/odoo/odoo.git
The cache directory is named git-autoshare
where appdirs.user_cache_dir is
(usually ~/.cache/git-autoshare/).
This location can be configured with the GIT_AUTOSHARE_CACHE_DIR
environment variable.
The default configuration file is named repos.yml
where appdirs.user_config_dir is
(usually ~/.config/git-autoshare/).
This location can be configured with the GIT_AUTOSHARE_CONFIG_DIR
environment variable.
By default git-autoshare
invokes git
as /usr/bin/git
. This can be configured with the GIT_AUTOSHARE_GIT_BIN
environment variable.
An environment variable is used when launching tests (to avoid configuration retrieval issue) : GIT_AUTOSHARE_MODE
. Which takes only one value: 'test'.
Author:
- Stéphane Bidoul (ACSONE)
Contributors
- Simone Orsi (Camptocamp)
- Mykhailo Panarin
- Stéphane Mangin
Maintainer:
This project is maintained by ACSONE SA/NV.