git 如何在远程存储库中更新文件,而不先克隆该存储库?

rmbxnbpk  于 2023-09-29  发布在  Git
关注(0)|答案(8)|浏览(137)

有没有一种方法可以将提交推送到远程git repo,而不需要首先创建该repo的本地克隆?
我有一个有效的远程存储库的URL,我知道文件的路径,我想做的就是将文件的更新版本推送到主服务器上。理想情况下,我希望它能与任何有效的远程repo URL一起工作,但如果它只与基于https的git URL一起工作,它仍然会很有帮助。
我猜这是不可能的,因为根据答案How to "git show" on a remote repo?,在一般情况下,即使不克隆也不可能检索单个文件。但我希望有一个使用一些较低级别的git命令的解决方案。

9wbgstp7

9wbgstp71#

不可能。但是由于一个预期提交只需要一个提交作为其父提交,所以可以使用所谓的“浅克隆”,只获取你需要的分支的尖端提交。这将仅从远程带来最小数量的对象。查找git clone--depth命令行选项。

xqnpmsa8

xqnpmsa82#

是的,您可以使用tagging推送新版本
按照以下步骤
在新项目根目录中

  1. git init
  2. git remote add origin [[email protected]](https://stackoverflow.com/cdn-cgi/l/email-protection) :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项目设置中更改你的默认分支。
bqf10yzr

bqf10yzr3#

刚刚发现了这个问题,并想到了一个更新。
如果你使用的是github,只需在你的repo url前面加上https://gitpod.io#。
这是一项允许您在线更新存储库的服务,因此您可以更新文件而无需在本地克隆。

kqqjbcuj

kqqjbcuj4#

如果你使用GitHub,那么你可以通过API轻松做到这一点
https://developer.github.com/v3/repos/contents/#create-or-update-a-file
基本上你做:
1.创建OAuth应用并获取访问令牌
https://developer.github.com/apps/building-oauth-apps/
1.向GitHub API发出请求:
使用访问令牌设置授权头(OAuth 2.0)
PUT https://api.github.com/repos/:owner/:repo/contents/:path
JSON body是这样的:

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

其中:

message-您的提交消息
content-更新后的Base64编码内容
sha- sha用于更新文件,可通过API请求获取

获取https://api.github.com/repos/:owner/:repo/contents/:path

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

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

imzjd6km

imzjd6km5#

不,我觉得不可能。您需要克隆整个存储库才能做到这一点。Git需要知道所有的文件和.git来正确地完成它的工作。这就是为什么你不能像那样随意推送文件的原因。

a5g8bdjr

a5g8bdjr6#

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

8nuwlpux

8nuwlpux7#

如果你使用Github,你可以使用Github Web Editor。更新文件而不克隆本地存储库的最简单方法是:
1.转到浏览器中的Github存储库
1.然后按.
您应该看到Visual Studio Code正在浏览器上运行。然后,创建文件夹或从计算机拖放文件
如需保存更改,请按:Ctrl + Shift + G或单击左栏中的“源代码控制”选项,然后提交更改。

nnsrf1az

nnsrf1az8#

我还没有测试过,但这里有一个想法。

添加新文件

创建一个没有文件的新仓库,并提交一个消息“第1天”。
接下来,添加所有其他提交和项目的其余部分。
现在检查“第1天”并从中创建一个分支。
--depth 1做一个浅拷贝克隆到这个分支,应该很轻。
最后,添加新文件并通过Github API创建PR到主分支。
搞定了!

更新文件

与新文件相同的策略,只是现在您将以冲突结束。你可以潜在地避免它与自动rebase决议,不知道如何做到这一点,在公关水平,所以...

相关问题