【问题标题】:Python push files to Github remote repo without local working directoryPython 将文件推送到没有本地工作目录的 Github 远程仓库
【发布时间】:2017-02-05 19:48:07
【问题描述】:

我正在开发一个基于 Python 的 Web 应用程序,用于协作 xml/文档编辑,客户端的一个要求是用户应该能够将他们创建(并保存在服务器上)的文件直接推送到 Github 远程仓库,而无需在服务器上创建本地克隆(即,没有本地工作目录或任何类型的跟踪)。在 GUI 术语中,这对应于转到 Github 网站并通过单击“上传文件”或“创建新文件”按钮手动将文件添加到远程存储库,或者只是在 Github 网站上编辑远程存储库中的现有文件然后在 Web 浏览器中提交更改。我想知道这个功能是否可以使用一些 Python Github 模块或使用 Github API 从头开始​​编写一些代码来实现?

【问题讨论】:

  • 让本地用户安装和配置 Git 有什么问题?
  • 问题似乎是这个网络应用程序的用户不应该以技术为导向,目的是让他们免于管理本地 git 帐户的麻烦。 (但利用项目管理对远程仓库的 git 跟踪)
  • and yet take advantage of the git tracking on the remote repo ...如果没有在本地配置 Git,他们就无法真正做到这一点。我会说要么下载 Git,要么只使用从 GitHub 上传。
  • 谢谢!是的,我想他们只是意味着他们可以跟踪谁编辑了什么以及何时编辑。

标签: python github github-api


【解决方案1】:

因此您可以通过 API 创建文件,如果用户有自己的 GitHub 帐户,您可以将其上传。

让我们以 github3.py 为例说明如何做到这一点:

import github3

gh = github3.login(username='foo', password='bar')
repository = gh.repository('organization-name', 'repository-name')
for file_info in files_to_upload:
    with open(file_info, 'rb') as fd:
        contents = fd.read()
    repository.create_file(
        path=file_info,
        message='Start tracking {!r}'.format(file_info),
        content=contents,
    )

您需要检查它是否返回一个您希望验证文件已成功上传的对象。您还可以指定 committerauthor 字典,以便您可以将提交归因于您的服务,这样人们就不会假设该人是在本地 git 设置上创作的。

【讨论】:

  • 一个快速的后续问题(仍然在没有本地工作目录的假设下):如果远程仓库中已经存在该文件并且我只想用修改后的同名文件更新它怎么办? (例如,相当于在Github网站上,上传远程已经存在的文件的修改版本)
  • @zangsir 后续问题应作为新问题提出。或者,您可以通过阅读 github3.py 的文档自己发现这一点。
  • 对不起,我再问一个新问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-03-11
  • 2013-02-21
  • 2020-04-25
  • 1970-01-01
  • 2021-08-01
  • 2022-10-13
  • 1970-01-01
相关资源
最近更新 更多