有没有一种方法可以将提交推送到远程git repo,而不需要首先创建该repo的本地克隆?
我有一个有效的远程存储库的URL,我知道文件的路径,我想做的就是将文件的更新版本推送到主服务器上。理想情况下,我希望它能与任何有效的远程repo URL一起工作,但如果它只与基于https的git URL一起工作,它仍然会很有帮助。
我猜这是不可能的,因为根据答案How to "git show" on a remote repo?,在一般情况下,即使不克隆也不可能检索单个文件。但我希望有一个使用一些较低级别的git命令的解决方案。
8条答案
按热度按时间9wbgstp71#
不可能。但是由于一个预期提交只需要一个提交作为其父提交,所以可以使用所谓的“浅克隆”,只获取你需要的分支的尖端提交。这将仅从远程带来最小数量的对象。查找
git clone
的--depth
命令行选项。xqnpmsa82#
是的,您可以使用tagging推送新版本
按照以下步骤
在新项目根目录中
git init
git remote add origin [[email protected]](https://stackoverflow.com/cdn-cgi/l/email-protection) :yourusername/yourpoject
git tag -a v2.0 -m 'version 2.0'
git add .
git commit -m "New Version 2.0 :rocket:"
git push -u origin v2.0
现在你有了一个新的分支v2.0和你的新项目,你的主分支保持不变。之后,如果你不想,你可以在你的github项目设置中更改你的默认分支。
bqf10yzr3#
刚刚发现了这个问题,并想到了一个更新。
如果你使用的是github,只需在你的repo url前面加上https://gitpod.io#。
这是一项允许您在线更新存储库的服务,因此您可以更新文件而无需在本地克隆。
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-您的提交消息
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
imzjd6km5#
不,我觉得不可能。您需要克隆整个存储库才能做到这一点。Git需要知道所有的文件和
.git
来正确地完成它的工作。这就是为什么你不能像那样随意推送文件的原因。a5g8bdjr6#
@algal,对于你的特定用例,你可能可以使用一个子模块(http://git-scm.com/docs/git-submodule)。您可以克隆并提交到子模块,而不克隆可能包含您提到的“大量”代码的“超级模块”。超级模块可以引用子模块以获取您提到的配置信息。
8nuwlpux7#
如果你使用Github,你可以使用Github Web Editor。更新文件而不克隆本地存储库的最简单方法是:
1.转到浏览器中的Github存储库
1.然后按
.
您应该看到Visual Studio Code正在浏览器上运行。然后,创建文件夹或从计算机拖放文件
如需保存更改,请按:
Ctrl + Shift + G
或单击左栏中的“源代码控制”选项,然后提交更改。nnsrf1az8#
我还没有测试过,但这里有一个想法。
添加新文件
创建一个没有文件的新仓库,并提交一个消息“第1天”。
接下来,添加所有其他提交和项目的其余部分。
现在检查“第1天”并从中创建一个分支。
用
--depth 1
做一个浅拷贝克隆到这个分支,应该很轻。最后,添加新文件并通过Github API创建PR到主分支。
搞定了!
更新文件
与新文件相同的策略,只是现在您将以冲突结束。你可以潜在地避免它与自动rebase决议,不知道如何做到这一点,在公关水平,所以...