What if we created a new directory in the repository called "org" which contains these kinds of files? It would be analogous to the "lisp" directory. I don't think we need to have both ob-R.org and ob-R.el in the repository.
For example I wrote
org-ref.org, and I load it like this in my init file (the intention here is to only tangle the org file when it is newer than the el file or if there is no el file. for some reason my memory says that org-babel-load-file was not doing this but that may be a faulty memory).
(if (or
(not (file-exists-p "org-ref.el"))
(< (float-time (nth 5 (file-attributes "org-ref.el")))
(float-time (nth 5 (file-attributes "
org-ref.org")))))
(progn
(org-babel-tangle-file (expand-file-name "
org-ref.org" starter-kit-dir))
(load-file (expand-file-name "org-ref.el" starter-kit-dir)))
(require 'org-ref))
I could see there being something like the lisp path for finding these files, so that we could just do:
(org-require 'org-ref)
or the org-babel-load-file could be adapted to have a path to search for files. This way there is no auto-tangling, committing, etc... just regular version control on the source of the source.