returnn.import_.git#

Provides needed Git utilities to manage the local checked out packages.

The packages are stored in: ~/returnn/pkg (Can be configured via env RETURNN_PKG_PATH)

We might have multiple checkouts of the same repo. In this case, we want to share the object files. We are using git worktree for this.

References:

Note about our terminology (esp vs Go terminology):

Go differentiates between packages, modules and repositories, and even major semantic version sub-directories inside the modules. We do not make this distinction. You have a repository, and some specific commit, and the file path inside the repo. The file path might be sth like transformer-v3.py to note that it is incompatible from an earlier version.

Note about our version (revision) format:

During development, you would want to work in a live working tree. There is a working tree in ...repo, and version=None refers to that.

Once development of one piece/module/package is ready, you always should specify the version explicitly. The format is <date>-<commit>, where date should be like YYYYMMDDHHMMSS (can potentially be shorter up to YYYYMMDD) and commit is a revision, with minimum 7 numbers of digits.

Note about our repo format:

Currently always assumed to be remote, and then cached in our repo cache.

returnn.import_.git.stat_repo(repo, version)[source]#
Parameters:
  • repo (str) – e.g. “github.com/rwth-i6/returnn-experiments”

  • version (str|None) – e.g. “20211231-0123abcd0123”

returnn.import_.git.get_repo_path(repo, version, _report_dev_version_usage_stack_frame_depth=1)[source]#
Parameters:
  • repo (str) – e.g. “github.com/rwth-i6/returnn-experiments”

  • version (str|None) – e.g. “20211231-0123abcd0123”

  • _report_dev_version_usage_stack_frame_depth (int) –

Returns:

path to repo

Return type:

str