Hi, thank you for the answer. I understand that the core of git is to make people work together when writing code. To get a tree of the source files is not directly part of that, but pure informational. That is also the intent of my fuse fs: provide the user information about the source files. Now I have a working ssh connection to the server, and open a channel for running the upload-pack on the server using the exec channel request: https://datatracker.ietf.org/doc/html/rfc4254#section-6.5 So in my program I do not have to do something like: ssh -x git@server "git-upload-pack 'simplegit-progit.git'" It is only the sending of an exec message with the right command. Via the SSH_MSG_CHANNEL_DATA message the server will return the output. In my program I have to write a parser to get the tree/direntries. Now you suggest the git clone --depth 1 --filter=blob:none --single-branch -b $branch command. How does that look when writing it in lowlevel git messages as described in https://git-scm.com/book/en/v2/Git-Internals-Transfer-Protocols ? I'm programming at this low level, so I have to write the messages to send to the server myself. And you mention the api github has for a git tree object. But git2 has already the git_tree object? Stef My project by the way is: https://github.com/stefbon/OSNS