使用用户和密码进行gitpython git身份验证

时间:2017-06-27 15:55:39

标签: git authentication gitpython

我正在使用GitPython,但没有找到使用用户名和密码推送回购的方法。任何人都可以给我一个工作实例或给我一些关于如何做的指针? 我需要做的是: 将文件添加到存储库,使用提供的用户名和密码将其推送。

3 个答案:

答案 0 :(得分:3)

最适合我的方法(与GitHub合作,自托管BitBucket,很可能也可以在GitLab上使用。)

先决条件

请注意,尽管名称为password,但这是GitHub生成的访问令牌,而不是GitHub密码。

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"

克隆存储库

这会将您的凭据存储在.git/config中,以后您将不需要它们。

Repo.clone_from(remote, full_local_path)

提交更改

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

推送更改

如上所述,您不需要凭据,因为它们已经存储在.git/config中。

repo = Repo(full_local_path)
origin = repo.remote(name="origin")
origin.push()

答案 1 :(得分:-1)

这就是我自己用来拉动的东西

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(与此类似)

此目录与pull.py位于同一目录中,不仅限于Github。

#!/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)

答案 2 :(得分:-2)

我找到了这个有效的解决方案:

  1. 创建一个这样的脚本:ask_pass.py
  2. 执行push之前分配环境变量:
  3.    os.environment['GIT_ASKPASS']= <full path to your script>
       os.environment['GIT_USERNAME'] = <committer username>
       os.environment['GIT_PASSWORD'] = <the password>
    

    任何事情都可以。