# Server Discovery 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. ## Guessing the Server 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: `git@git-server.com: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` ## SSH 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. ```bash # Called for remotes like: # * git@git-server.com:foo/bar.git # * ssh://git@git-server.com/foo/bar.git $ ssh git@git-server.com 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: ```bash $ ssh git@git-server.com git-lfs-authenticate foo/bar.git wat Invalid LFS operation: "wat" ``` ## Custom Configuration 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. ```bash $ 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: ```bash $ 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. ```bash $ git config --file=.lfsconfig lfs.url https://lfs-server.com/foo/bar ```