使用 gitpython 从本地 Gitlab 存储库自动进行 git pull 需要 [电子邮件保护] 密码

2024-02-24

我们有一个本地托管的 Gitlab 存储库,我正在尝试使用以下脚本通过 ssh 使用 gitpython 自动推送和拉取:

LOCAL_REPO_PATH = "/path/to/repository"

repo = Repo(LOCAL_REPO_PATH)

origin = repo.remotes[0]
origin.pull()

# Do some automated changes

index = repo.index

index.add(["*"])
index.commit("Removed/Added stuff")

author = Actor("Script","[email protected] /cdn-cgi/l/email-protection)
committer = Actor("Script","[email protected] /cdn-cgi/l/email-protection)

origin.push()

仓库的配置是

[core]
        repositoryformatversion = 0
        filemode = true
        bare = false
        logallrefupdates = true
[remote "origin"]
        url = git@gitlab.<repo url>:<owner username>/<repository name>.git
        fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
        remote = origin
        merge = refs/heads/master

每当我尝试运行它时,它都会到达 origin.pull() 并停止执行以请求[电子邮件受保护] /cdn-cgi/l/email-protection采用以下格式:

Password: 
Password: 
Password: 
git@gitlab.<url>'s password: 
git@gitlab.<url>'s password:
git@gitlab.<url>'s password:

密码输入错误6次后,会抛出此错误

Traceback (most recent call last):
  File "git-test.py", line 15, in <module>
    origin.pull()
  File "/usr/local/lib/python3.8/dist-packages/git/remote.py", line 910, in pull
    res = self._get_fetch_info_from_stderr(proc, progress,
  File "/usr/local/lib/python3.8/dist-packages/git/remote.py", line 750, in _get_fetch_info_from_stderr
    proc.wait(stderr=stderr_text)
  File "/usr/local/lib/python3.8/dist-packages/git/cmd.py", line 502, in wait
    raise GitCommandError(remove_password_if_present(self.args), status, errstr)
git.exc.GitCommandError: Cmd('git') failed due to: exit code(1)
  cmdline: git pull -v origin
  stderr: 'fatal: Could not read from remote repository.'

有什么方法可以在没有 git 用户密码的情况下自动执行此操作吗?

Edit 1

我问了一个新问题here https://stackoverflow.com/questions/73284447/git-push-pull-over-ssh-to-locally-hosted-gitlab-as-root-requires-gitgitlab-pass,因为我已经缩小了问题的范围。


问题实际上不在于 GitPython,而在于 .git 文件夹。我尝试做一个git pull从命令行,它给出了这个错误

error: cannot open .git/FETCH_HEAD: Permission denied

查阅此链接:, I ran chown myuser:mygroup -R .git,让我能够git pull没有错误。这解决了运行脚本时的上述问题。显然我搞乱了权限并忘记了它。

我不确定为什么这会提示我 ssh 进入 git@gitlab,但问题现已解决

Edit 1:

我做了一些实验,并运行 git fetchsudo模式需要 git@gitlab 用户来执行。我正在研究一种降低单个命令权限的方法

Since git pull实际上是一个组合git fetch and git merge,FETCH_HEAD 文件是使用运行该文件的人的权限创建的git fetch。我假设由于脚本必须作为 sudo 运行,内部git fetch也作为 sudo 运行。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 gitpython 从本地 Gitlab 存储库自动进行 git pull 需要 [电子邮件保护] 密码 的相关文章

  • c++11 正则表达式比 python 慢

    嗨我想了解为什么以下代码使用正则表达式进行分割字符串分割 include
  • 打开文件路径在 python 中不起作用[重复]

    这个问题在这里已经有答案了 我正在编写一个数据库程序 personica 是我的测试主题 我通常在文件路径的位置有一个变量 但出于测试和演示的目的 我只有一个字符串 在我的计算机上的这个确切位置有一个文本文件 顺便说一句 因为我很偏执 所以
  • 如何使用 django Rest 框架保存多对多字段对象

    我有博客 发布 标签三个模型 在博客模型中 我将字段 postedin 作为发布模型的外键 将 标签 作为标签模型的许多字段 模型 py class Posted models Model name models CharField Pos
  • 如何使用格式保存 Tkinter 文本小部件的内容

    我在 python 中使用 Tkinter 在文本窗口中显示输出 我发现使用 get 功能我可以从此窗口检索文本内容 但我有用不同背景颜色标记的文本部分 是否可以将内容与这些颜色一起复制到文件 例如 html 或 doc 中 没有对你想要的
  • Git 中的专有+开源设置? (例如铬/铬)

    您将如何设置一个拥有专有版本和开源版本 例如 Chrome 和 Chromium 的代码存储库 对于 Git 您会使用两个分支还是两个存储库 您如何使 私有 版本与开源版本保持同步 如果是我 我会有两个存储库 这样 您就可以对每个版本拥有不
  • 在Python中整齐地绘制PMF

    有没有一个库可以帮助我在 python 中整齐地绘制样本的概率质量函数 如下所示 通过matplotlib pyplot的stem模块 matplotlib pyplot stem args kwargs from matplotlib p
  • 使用 python boto3 管理 Route53 中具有多个 IP 的 A 记录

    我的route53中有一条A记录 后面有多个IP 例子 A record dummy xyz com 点IPs 1 1 1 1 2 2 2 2 和 3 3 3 3路由策略 Simple 我使用下面的代码来更新单个 IP 的记录 Change
  • django-allauth:电子邮件确认

    我已经设置了 django allauth 并在新用户注册时使用电子邮件确认 效果很好 但在确认电子邮件中 我得到 Hello from example com You re receiving this e mail because us
  • 无法使用 wxPython 打开在 folium 中生成的本地 HTML 文件

    我目前正在尝试将 GPS 坐标绘制为地图上的标记 并在 wxPython 中显示结果 我使用 folium 绘制坐标标记并生成 HTML 文件 import folium fmap folium Map 43 5321 172 6362 z
  • NumPy 根据另一个数组中的值对第三个数组中的每个匹配元素求和一个数组

    我有两个 numpy 数组 一个包含值 另一个包含每个值类别 values np array 1 2 3 4 5 6 7 8 9 10 valcats np array 101 301 201 201 102 302 302 202 102
  • 自动创建带有文件输出的目录[重复]

    这个问题在这里已经有答案了 假设我想制作一个文件 filename foo bar baz txt with open filename w as f f write FOOBAR 这给出了一个IOError since foo bar不存
  • Scrapy FakeUserAgentError:获取浏览器时发生错误

    我使用 Scrapy FakeUserAgent 并在我的 Linux 服务器上不断收到此错误 Traceback most recent call last File usr local lib64 python2 7 site pack
  • __author__ 的起源是什么?

    使用私有元数据变量的约定在哪里 author 一个模块内部从何而来 This http mail python org pipermail python dev 2001 March 013328 htmlPython 邮件列表线程似乎暗示
  • Python-使用元组作为列表索引[重复]

    这个问题在这里已经有答案了 我有一个元组列表 tuples list 1 0 2 3 3 2 2 0 我想访问二维数组的元素a例如 使用其中一些元组 for i in range 3 print a tuples list i 应该输出的值
  • 使用 Celery 通过 Gevent 进行实时、同步的外部 API 查询

    我正在开发一个 Web 应用程序 该应用程序将接收用户的请求 并且必须调用许多外部 API 来编写对该请求的答案 这可以直接从主 Web 线程使用 gevent 之类的东西来扇出请求来完成 或者 我在想 我可以将传入的请求放入队列中 并使用
  • 启动客户端时,代码要求提供电话/机器人令牌

    使用 Telethon 库运行我的第一个代码时 它要求提供机器人令牌 这是实际的代码 from telethon import TelegramClient events sync api id 1234567 api hash xxxxx
  • 如何单独捕获这些异常?

    我正在编写一个与 Quickbooks 交互的 Python 程序 连接到 Quickbooks 时 根据问题的不同 我可能会遇到以下两个常见异常之一 pywintypes com error 2147352567 Exception oc
  • 检查图像中是否有太薄的区域

    我正在尝试验证雕刻机的黑白图像 更多的是剪贴画图像 不是照片 我需要考虑的主要事情之一是区域的大小 或线条的宽度 因为机器无法处理太细的线条 所以我需要找到比给定阈值更细的区域 以此图为例 竖琴的琴弦可能太细而无法雕刻 我正在阅读有关 Ma
  • 如何从 PyObject 获取指向字符串的 char*

    我怎样才能得到一个char from a PyObject它指向一个字符串 例如 这是 python 脚本 Test Connect 272 22 20 65 1234 这是 C 代码 static PyObject Connect PyO
  • 内置模块位于哪里?

    我尝试查找列出的所有目录sys path但我找不到任何builtins py文件 那么它在哪里呢 从字面上看 该模块内置于 python 解释器中 gt gt gt import builtins gt gt gt builtins

随机推荐