In need for an enhanced git URL scheme
Which allows specifying heads/branches and paths within the repository.
I'm currently testing project-builder, to tool for easily building software for different Linux distributions. One of the features of this tool is to check out the configuration from a source code management system. Well, with git this becomes quite a problem, as one can not specify the branch nor a path within the repo when cloning.
So I'm proposing an extended git URL schema:
Example:
git://<host>/path/to/git/repo?h=devel&p=src/Makefile
Which means:
- The repository itself is passed as URL as usual 
- The head (aka branch) is passed as query parameter "h" 
- The file or directory is passed as query parameter "p" 
Reasoning
For cloning the repository, git needs to know the repository URL. When passing a URL like cgit uses, git can not decide which part of the path belongs to the repo and which part is below. Git would need to walk the URL-path up until it is able to find access a valid repository. This behaviour is not desired as it may have unexpected side-effects, esp. when accessing a a http-based repository.
This means: The part-part of the URL must only contain the path to the repository!
So obviously there is a need for specifying the head/branch to access. This is given as a query parameter. I decided to use "h" like "head" like cgit does.
If one wants to specify a certain file or directory within the repository, this is as a query parameter, too. I decided to use "p" like "path".
FAQ
- Why not using the notation /BRANCH/path?
- 
See above: When cloning, git would need to walk the URL-path up until it is able to access a valid repository. This behaviour is not desired as it may have unexpected side-effects, esp. when accessing a a http-based repository. Additionally git does not support this when cloning local repositories. (Try something like git clone /path/to/repo/master/Makefile.) So this would implement an asymmetry.
- Why not using the notation /path@BRANCH?
- 
This would inhibit using an @-sign in any path. Plus it does not solve the problem described in the /BRANCH/path-case.
- Why not using the notation /tree/BRANCH/path?
- 
Same problem here: git could decide which part of the path belongs to the repo. 
