One of the Git LFS goals is to work with supporting Git remotes with as few required configuration properties as possible. Git LFS will attempt to use your Git remote to determine the LFS server. You can also configure a custom LFS server if your Git remote doesn't support one, or you just want to use a separate one.
Look for the Endpoint
properties in git lfs env
to see your current LFS
servers.
By default, Git LFS will append .git/info/lfs
to the end of a Git remote url
to build the LFS server URL it will use:
Git Remote: https://git-server.com/foo/bar
LFS Server: https://git-server.com/foo/bar.git/info/lfs
Git Remote: https://git-server.com/foo/bar.git
LFS Server: https://git-server.com/foo/bar.git/info/lfs
Git Remote: [email protected]:foo/bar.git
LFS Server: https://git-server.com/foo/bar.git/info/lfs
Git Remote: ssh://git-server.com/foo/bar.git
LFS Server: https://git-server.com/foo/bar.git/info/lfs
If Git LFS detects an SSH remote, it will run the git-lfs-authenticate
command. This allows supporting Git servers to give the Git LFS client
alternative authentication so the user does not have to setup a git credential
helper.
Git LFS runs the following command:
$ ssh [{user}@]{server} git-lfs-authenticate {path} {operation}
The user
, server
, and path
properties are taken from the SSH remote. The
operation
can either be "download" or "upload". The SSH command can be
tweaked with the GIT_SSH
or GIT_SSH_COMMAND
environment variables. The
output for successful commands is JSON, and matches the schema as an action
in a Batch API response. Git LFS will dump the STDERR from the ssh
command if
it returns a non-zero exit code.
Examples:
The git-lfs-authenticate
command can even suggest an LFS endpoint that does
not match the Git remote by specifying an href
property.
# Called for remotes like:
# * [email protected]:foo/bar.git
# * ssh://[email protected]/foo/bar.git
$ ssh [email protected] git-lfs-authenticate foo/bar.git download
{
"href": "https://lfs-server.com/foo/bar",
"header": {
"Authorization": "RemoteAuth some-token"
},
"expires_in": 86400
}
Git LFS will output the STDERR if git-lfs-authenticate
returns a non-zero
exit code:
$ ssh [email protected] git-lfs-authenticate foo/bar.git wat
Invalid LFS operation: "wat"
If Git LFS can't guess your LFS server, or you aren't using the
git-lfs-authenticate
command, you can specify the LFS server using Git config.
Set lfs.url
to set the LFS server, regardless of Git remote.
$ git config lfs.url https://lfs-server.com/foo/bar
You can set remote.{name}.lfsurl
to set the LFS server for that specific
remote only:
$ git config remote.dev.lfsurl http://lfs-server.dev/foo/bar
$ git lfs env
...
Endpoint=https://git-server.com/foo/bar.git/info/lfs (auth=none)
Endpoint (dev)=http://lfs-server.dev/foo/bar (auth=none)
Git LFS will also read these settings from a .lfsconfig
file in the root of
your repository. This lets you commit it to the repository so that all users
can use it, if you wish.
$ git config --file=.lfsconfig lfs.url https://lfs-server.com/foo/bar