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

时间:2013-04-18 08:10:01

标签: git

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

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

我猜这是不可能的,因为根据答案How to "git show" on a remote repo?,在一般情况下甚至无法在没有克隆的情况下检索单个文件也是不可能的。但是我希望有一种解决方法可以使用一些较低级别的git命令。

6 个答案:

答案 0 :(得分:10)

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

答案 1 :(得分:3)

不,我不认为这是可能的。您需要克隆整个存储库才能使其正常工作。 Git需要知道所有文件并.git才能正确完成工作。这就是为什么你不能像这样推送任意文件。

答案 2 :(得分:2)

是的,您可以使用tagging

推送新版本

按照以下步骤操作

在新项目根目录

  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
  7. 现在您的新项目名为v2.0 而你的主分支保持不变。 之后,如果您不想在github项目设置中更改默认分支。

答案 3 :(得分:1)

@algal,对于您的特定用例,您可能能够使用子模块(http://git-scm.com/docs/git-submodule)。您可以克隆并提交到子模块,无需克隆可能包含您提到的“大量”代码的“超级模块”。超级模块可以引用子模块以获取您提到的配置信息。

答案 4 :(得分:1)

只是发现了这个问题并想到了更新。

如果您使用的是github,只需在您的回购网址前加上https://gitpod.io#

此服务可让您在线更新您的存储库,因此您可以更新文件而无需在本地进行克隆。

答案 5 :(得分:-1)

好吧,如果您使用的是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)设置授权标头
    放入https://api.github.com/repos/:owner/:repo/contents/:path
    像这样的JSON正文:

{
  "message": "my test commit through API",
  "content": "QmFzZTY0IGVuY29kZWQgY29udGVudCBoZXJl",
  "sha": "cd220ncv229f2e4a95bce426ff48b1ae6b885b3a42"
}

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

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

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