Other Git repository hosts

Site admins can sync Git repositories on any Git repository host (by Git clone URL) with Sourcegraph so that users can search and navigate the repositories. Use this method only when your repository host is not named as a supported external service.

To add Git repositories from any Git repository host:

  1. Go to User menu > Site admin.
  2. Open the External services page.
  3. Press + Add external service.
  4. Press Single Git repositories.
  5. Enter a Display name (such as the human-readable name of the repository host).
  6. Set the url and repos fields in the JSON editor. Use Cmd/Ctrl+Space for completion, and see configuration documentation below.
  7. Press Add external service.

Constructing the url for SSH access

If your code host serves git repositories over SSH (e.g. Gerrit), make sure your Sourcegraph instance can connect to your code host over SSH:

docker exec $CONTAINER ssh -p $PORT $USER@$HOSTNAME
  • $CONTAINER is the name or ID of your sourcegraph/server container
  • $PORT is the port on which your code host's git server is listening for connections (Gerrit defaults to 29418)
  • $USER is your user on your code host (Gerrit defaults to admin)
  • $HOSTNAME is the hostname of your code host from within the sourcegraph/server container (e.g. gerrit.example.com)

Here's an example for Gerrit:

docker exec sourcegraph ssh -p 29418 [email protected]

The url field is then

  "url": "ssh://$USER@$HOSTNAME:$PORT"`

Here's an example for Gerrit:

  "url": "ssh://[email protected]:29418",

Adding repositories

For Gerrit, elements of the repos field are the same as the repository names. For example, a repository at https://gerrit.example.com/admin/repos/gorilla/mux will be "gorilla/mux" in the repos field.

Repositories must be listed individually:

  "repos": [
    "gorilla/mux",
    "sourcegraph/sourcegraph"
  ]

Configuration

admin/external_service/other_external_service.schema.json

{
	"repos": null,

	// The pattern used to generate the corresponding Sourcegraph repository name for the repositories. In the pattern, the variable "{base}" is replaced with the Git clone base URL host and path, and "{repo}" is replaced with the repository path taken from the `repos` field.
	//
	// For example, if your Git clone base URL is https://git.example.com/repos and `repos` contains the value "my/repo", then a repositoryPathPattern of "{base}/{repo}" would mean that a repository at https://git.example.com/repos/my/repo is available on Sourcegraph at https://sourcegraph.example.com/git.example.com/repos/my/repo.
	//
	// It is important that the Sourcegraph repository name generated with this pattern be unique to this code host. If different code hosts generate repository names that collide, Sourcegraph's behavior is undefined.
	"repositoryPathPattern": "{base}/{repo}",
	// Other example values:
	// - "pretty-host-name/{repo}"

	"url": null
	// Other example values:
	// - "https://github.com/?access_token=secret"
	// - "ssh://[email protected]:2333/"
	// - "git://host.xz:2333/"
}