How do I provide a username and password when running “git clone git@remote.git”?

后端 未结 10 2066
有刺的猬
有刺的猬 2020-11-22 07:00

I know how to provide a username and password to an HTTPS request like this:

git clone https://username:password@remote

But I\'d like to kn

相关标签:
10条回答
  • 2020-11-22 07:16

    Though there are many answers, myself facing the repeated issue when username or password has special characters in it.

    URL encode your username and password for git, then use it as part of URL itself (when there is no security concern).

    Say, URL encoded value of username

    'user+1' is user%2B1

    and URL encoded value of password

    'Welcome@1234' is Welcome%401234

    Then your GIT Clone URL would look like,

    git clone https://user%2B1:Welcome%401234@actual-git-url-for-the-repo works perfectly, whereas,

    git clone https://user+1:Welcome@1234@actual-git-url-for-the-repo gives you 403 errors

    Hope this helps.

    Just in case, want to URL encode online: https://www.urlencoder.org/

    0 讨论(0)
  • 2020-11-22 07:17
    git config --global core.askpass
    

    Run this first before cloning the same way, should be fixed!

    0 讨论(0)
  • 2020-11-22 07:23

    Based on Michael Scharf's comment:

    You can leave out the password so that it won't be logged in your Bash history file:

    git clone https://username@github.com/username/repository.git
    

    It will prompt you for your password.

    Alternatively, you may use:

    git clone https://username:password@github.com/username/repository.git
    

    This way worked for me from a GitHub repository.

    0 讨论(0)
  • 2020-11-22 07:25

    If you're using http/https and you're looking to FULLY AUTOMATE the process without requiring any user input or any user prompt at all (for example: inside a CI/CD pipeline), you may use the following approach leveraging git credential.helper

    GIT_CREDS_PATH="/my/random/path/to/a/git/creds/file"
    # Or you may choose to not specify GIT_CREDS_PATH at all.
    # See https://git-scm.com/docs/git-credential-store#FILES for the defaults used
    
    git config --global credential.helper "store --file ${GIT_CREDS_PATH}"
    echo "https://alice:${ALICE_GITHUB_PASSWORD}@github.com" > ${GIT_CREDS_PATH}
    

    where you may choose to set the ALICE_GITHUB_PASSWORD environment variable from a previous shell command or from your pipeline config etc.

    Remember that "store" based git-credential-helper stores passwords & values in plain-text. So make sure your token/password has very limited permissions.


    Now simply use https://alice@github.com/my_repo.git wherever your automated system needs to fetch the repo - it will use the credentials for alice in github.com as store by git-credential-helper.

    0 讨论(0)
  • 2020-11-22 07:28

    In the comments of @Bassetassen's answer, @plosco mentioned that you can use git clone https://<token>@github.com/username/repository.git to clone from GitHub at the very least. I thought I would expand on how to do that, in case anyone comes across this answer like I did while trying to automate some cloning.

    GitHub has a very handy guide on how to do this, but it doesn't cover what to do if you want to include it all in one line for automation purposes. It warns that adding the token to the clone URL will store it in plaintext in .git/config. This is obviously a security risk for almost every use case, but since I plan on deleting the repo and revoking the token when I'm done, I don't care.

    1. Create a Token

    GitHub has a whole guide here on how to get a token, but here's the TL;DR.

    1. Go to Settings > Developer Settings > Personal Access Tokens (here's a direct link)
    2. Click "Generate a New Token" and enter your password again. (here's another direct link)
    3. Set a description/name for it, check the "repo" permission and hit the "Generate token" button at the bottom of the page.
    4. Copy your new token before you leave the page

    2. Clone the Repo

    Same as the command @plosco gave, git clone https://<token>@github.com/<username>/<repository>.git, just replace <token>, <username> and <repository> with whatever your info is.

    If you want to clone it to a specific folder, just insert the folder address at the end like so: git clone https://<token>@github.com/<username>/<repository.git> <folder>, where <folder> is, you guessed it, the folder to clone it to! You can of course use ., .., ~, etc. here like you can elsewhere.

    3. Leave No Trace

    Not all of this may be necessary, depending on how sensitive what you're doing is.

    • You probably don't want to leave that token hanging around if you have no intentions of using it for some time, so go back to the tokens page and hit the delete button next to it.
    • If you don't need the repo again, delete it rm -rf <folder>.
    • If do need the repo again, but don't need to automate it again, you can remove the remote by doing git remote remove origin or just remove the token by running git remote set-url origin https://github.com/<username>/<repository.git>.
    • Clear your bash history to make sure the token doesn't stay logged there. There are many ways to do this, see this question and this question. However, it may be easier to just prepend all the above commands with a space in order to prevent them being stored to begin with.

    Note that I'm no pro, so the above may not be secure in the sense that no trace would be left for any sort of forensic work.

    0 讨论(0)
  • 2020-11-22 07:29

    On Windows, the following steps should re-trigger the GitHub login window when git cloneing:

    • Search start menu for "Credential Manager"
    • Select "Windows Credentials"
    • Delete any credentials related to Git or GitHub

    0 讨论(0)
提交回复
热议问题