Skip to content

Commit

Permalink
Auto merge of #7658 - ehuss:doc-git-authentication, r=alexcrichton
Browse files Browse the repository at this point in the history
Docs: Add an appendix on git authentication.

This adds a short section on how to set up authentication with git.  People seem to occasionally have difficulty with setting it up, so the hope is that this might provide some guidance, and a place for people to get started.  I'm not sure if it will actually be helpful, though.
  • Loading branch information
bors committed Dec 4, 2019
2 parents 76cdf93 + 5d9eff3 commit 6132112
Show file tree
Hide file tree
Showing 4 changed files with 64 additions and 1 deletion.
1 change: 1 addition & 0 deletions src/doc/src/SUMMARY.md
Original file line number Diff line number Diff line change
Expand Up @@ -72,3 +72,4 @@

* [FAQ](faq.md)
* [Appendix: Glossary](appendix/glossary.md)
* [Appendix: Git Authentication](appendix/git-authentication.md)
56 changes: 56 additions & 0 deletions src/doc/src/appendix/git-authentication.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
# Git Authentication

Cargo supports some forms of authentication when using git dependencies and
registries. This appendix contains some information for setting up git
authentication in a way that works with Cargo.

If you need other authentication methods, the [`net.git-fetch-with-cli`]
config value can be set to cause Cargo to execute the `git` executable to
handle fetching remote repositories instead of using the built-in support.
This can be enabled with the `CARGO_NET_GIT_FETCH_WITH_CLI=true` environment
variable.

## HTTPS authentication

HTTPS authentication requires the [`credential.helper`] mechanism. There are
multiple credential helpers, and you specify the one you want to use in your
global git configuration file.

```ini
# ~/.gitconfig

[credential]
helper = store
```

Cargo does not ask for passwords, so for most helpers you will need to give
the helper the initial username/password before running Cargo. One way to do
this is to run `git clone` of the private git repo and enter the
username/password.

> **Tip:**<br>
> macOS users may want to consider using the osxkeychain helper.<br>
> Windows users may want to consider using the [GCM] helper.
> **Note:** Windows users will need to make sure that the `sh` shell is
> available in your `PATH`. This typically is available with the Git for
> Windows installation.
## SSH authentication

SSH authentication requires `ssh-agent` to be running to acquire the SSH key.
Make sure the appropriate environment variables are set up (`SSH_AUTH_SOCK` on
most Unix-like systems), and that the correct keys are added (with `ssh-add`).
Windows uses Pageant for SSH authentication.

> **Note:** Cargo does not support git's shorthand SSH URLs like
> `[email protected]/user/repo.git`. Use a full SSH URL like
> `ssh://[email protected]/user/repo.git`.
>
> **Note:** SSH configuration files (like OpenSSH's `~/.ssh/config`) are not
> used by Cargo's built-in SSH library. More advanced requirements should use
> [`net.git-fetch-with-cli`].
[`credential.helper`]: https://git-scm.com/book/en/v2/Git-Tools-Credential-Storage
[`net.git-fetch-with-cli`]: ../reference/config.md#netgit-fetch-with-cli
[GCM]: https://github.com/Microsoft/Git-Credential-Manager-for-Windows/
4 changes: 3 additions & 1 deletion src/doc/src/reference/config.md
Original file line number Diff line number Diff line change
Expand Up @@ -538,7 +538,9 @@ indexes and git dependencies. If `false`, then it uses a built-in `git`
library.

Setting this to `true` can be helpful if you have special authentication
requirements that Cargo does not support.
requirements that Cargo does not support. See [Git
Authentication](../appendix/git-authentication.md) for more information about
setting up git authentication.

##### `net.offline`
* Type: boolean
Expand Down
4 changes: 4 additions & 0 deletions src/doc/src/reference/specifying-dependencies.md
Original file line number Diff line number Diff line change
Expand Up @@ -142,6 +142,10 @@ the latest commit on a branch named `next`:
rand = { git = "https://github.com/rust-lang-nursery/rand", branch = "next" }
```

See [Git Authentication] for help with git authentication for private repos.

[Git Authentication]: ../appendix/git-authentication.md

### Specifying path dependencies

Over time, our `hello_world` package from [the guide](../guide/index.md) has
Expand Down

0 comments on commit 6132112

Please sign in to comment.