如何在不首先克隆该repo的情况下更新远程仓库中的文件?

alg*_*gal 18 git

有没有办法将提交推送到远程git仓库,而不首先制作该仓库的本地克隆?

我有一个有效的远程仓库URL,我知道文件的路径,我想要做的就是将文件的更新版本推送到主服务器上.理想情况下,我希望这可以使用任何有效的远程repo URL,但如果它只适用于基于https的git URL,它仍然会有用.

我猜这是不可能的,因为根据答案如何在远程仓库中"git show",即使在一般情况下没有克隆也无法检索单个文件.但是我希望有一种解决方法可以使用一些较低级别的git命令.

kos*_*tix 13

不可能.但是,由于预期提交只需要将一个提交作为其父级,因此可以使用所谓的"浅层克隆"并仅获取所需分支的提示.这将仅从遥控器带来最少量的对象.查找--depth命令行选项git clone.

  • @Shahbaz,[完](http://article.gmane.org/gmane.comp.version-control.git/221634). (3认同)
  • @Shahbaz,是的,手册是错误的。Git 协议,在执行推送时,是这样的:“嘿,远程端,请用这堆对象更新那个引用 `refs/heads/master`;在我更新之前那个引用的 SHA-1 是 AAA,新提示的 SHA-1 将是 BBB”,因此浅克隆具有将新提交传递到远程所需的所有信息。 (2认同)

Fat*_*gun 8

是的,您可以使用标记推送新版本

按照这个步骤

在您的新项目根目录中

  1. git init
  2. git remote add origin git@github.com:yourusername/yourpoject
  3. git tag -a v2.0 -m 'version 2.0'
  4. git add .
  5. git commit -m "New Version 2.0 :rocket:"
  6. git push -u origin v2.0

现在您的新项目有了一个名为 v2.0 的新分支,并且您的主分支保持不变。之后,如果您不想,您可以在您的 github 项目设置中更改您的默认分支。

  • +1 虽然这不能回答确切的问题(要求更新 master 中的文件),但它仍然很有用,因为这样可以避免从推送的位置获取源。 (2认同)

Kla*_*men 6

刚刚发现这个问题并想到更新。

如果您使用 github,只需在您的存储库 URL 前面加上https://gitpod.io#前缀。

该服务允许您在线更新存储库,因此您无需在本地克隆即可更新文件。


tar*_*rkh 5

好吧,如果您使用 GitHub,那么您可以使用 GitHub API
https://developer.github.com/v3/repos/contents/#create-or-update-a-file轻松完成此操作

基本上你会这样做:

  1. 创建 OAuth 应用程序并获取访问令牌
    https://developer.github.com/apps/building-oauth-apps/

  2. 向 GitHub API 发出请求:
    使用您的访问令牌 (OAuth 2.0) 设置授权标头
    PUT https://api.github.com/repos/:owner/:repo/contents/:path
    和 JSON 正文,如下所示:

{
  "message": "my test commit through API",
  "content": "QmFzZTY0IGVuY29kZWQgY29udGVudCBoZXJl",
  "sha": "cd220ncv229f2e4a95bce426ff48b1ae6b885b3a42"
}
Run Code Online (Sandbox Code Playgroud)

其中:
message - 您的提交消息
内容- 以 Base64 格式编码的更新内容
sha - 用于更新文件的 sha,您可以通过 API 请求
GET获取它https://api.github.com/repos/:owner/:repo/contents/ :小路

:owner - 存储库所有者
:repo - 存储库名称
:path - 存储库中文件的路径

示例请求: https:
//api.github.com/repos/nodejs/node/contents/README.md