# git_refs
#
# This file contains a list of repos, paths within those repos, and git
# references (branch/tag/commit hash) that are checked out with `git checkout
# <ref>` during creation of documentation.
#
# - First column is the git repo name
# - Second column is the subdirectory of the repo to symlink into the
#   docs directory
# - Third column is the reference (branch/tag/commit) to checkout

_REPO NAME_             _DIR_    _REF_

bbsim                      /        0e9fabf1747ccd5570cc49b8a4f54dfd8f194994
cord-tester                /        master
ofagent-go                 /        e8d2e9ce7874eb38855eca8d7c31d48b4bb842c7
openolt                    /        4a663feb2d8d1291c31605c7580dcf8f4e3cfb8a
voltctl                    /        f65749dce479d3339683f5048e77b41fefe03b0f
voltha-openolt-adapter     /        2f6b5bc96948e126c83ad0965ebc8c09bc06e221
voltha-openonu-adapter     /        b571ee9ed5d95eb4f516a8b158d8a2ce82361165
voltha-openonu-adapter-go  /        d96df189b00bd7beaf09df06a936f754b270c1b0
voltha-protos              /        24adfd66e71e8b49125a349391dcd5dd5af5e602
voltha-system-tests        /        master
kind-voltha                /        f942da334f192f63f8d8b9e8da13855db8bed3ea
