gitpython git authentication using user and password

后端 未结 3 1888
离开以前
离开以前 2021-01-01 18:57

I\'m using GitPython but did not find a way to push to repo using username and password. Can anybody send me a working example or give me some pointer about how to do it? W

相关标签:
3条回答
  • 2021-01-01 19:17

    What worked well for me (worked with GitHub, self hosted BitBucket, most likely will work on GitLab too).

    Pre-requisites

    Note, that despite the name, password here is your access token generated by GitHub and NOT your GitHub password.

    from git import Repo
    
    full_local_path = "/path/to/repo/"
    username = "your-username"
    password = "your-password"
    remote = f"https://{username}:{password}@github.com/some-account/some-repo.git"
    

    Clone repository

    This will store your credentials in .git/config, you won't need them later.

    Repo.clone_from(remote, full_local_path)
    

    Commit changes

    repo = Repo(full_local_path)
    repo.git.add("rel/path/to/dir/with/changes/")
    repo.index.commit("Some commit message")
    

    Push changes

    As mentioned above, you don't need your credentials, since they are already stored in .git/config.

    repo = Repo(full_local_path)
    origin = repo.remote(name="origin")
    origin.push()
    
    0 讨论(0)
  • 2021-01-01 19:30

    This is what I used for myself for pulling

    pull.py

    #! /usr/bin/env python3
    
    import git
    import os
    from getpass import getpass
    
    project_dir = os.path.dirname(os.path.abspath(__file__))
    os.environ['GIT_ASKPASS'] = os.path.join(project_dir, 'askpass.py')
    os.environ['GIT_USERNAME'] = username
    os.environ['GIT_PASSWORD'] = getpass()
    g = git.cmd.Git('/path/to/some/local/repo')
    g.pull()
    

    askpass.py (similar to this one)

    This is in the same directory as pull.py and is not limited to Github only.

    #!/usr/bin/env python3
    #
    # Short & sweet script for use with git clone and fetch credentials.
    # Requires GIT_USERNAME and GIT_PASSWORD environment variables,
    # intended to be called by Git via GIT_ASKPASS.
    #
    
    from sys import argv
    from os import environ
    
    if 'username' in argv[1].lower():
        print(environ['GIT_USERNAME'])
        exit()
    
    if 'password' in argv[1].lower():
        print(environ['GIT_PASSWORD'])
        exit()
    
    exit(1)
    
    0 讨论(0)
  • 2021-01-01 19:31

    I found this working solution:

    1. create a script like this: ask_pass.py
    2. before to execute push assign the environment vars:
       os.environment['GIT_ASKPASS']= <full path to your script>
       os.environment['GIT_USERNAME'] = <committer username>
       os.environment['GIT_PASSWORD'] = <the password>
    

    and anything works fine.

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