如何在不首先克隆整个repo的情况下将文件添加到远程Git repo(Github)

ssc*_*zio 16 svn git github

这个Git问题与另一个关于SVN的问题非常相似.

我有一个充满大文件的repo,我需要添加一个文件.这在SVN中非常容易.

svn import -m "Adding just a file" file_name http://path/to/svn/repo/file_name

如何在Git中实现这个简单的任务?

sid*_*ker 5

至少对于GitHub(不是git它本身),GitHub API提供了一种无需克隆即可创建文件的方法:

https://developer.github.com/v3/repos/contents/#create-a-file

PUT /repos/:owner/:repo/contents/:path

# Parameters #
----------------------------------------------------------------
Name     Type    Description
------   ------  -----------------------------------------------
path     string  Required. The content path.
message  string  Required. The commit message.
content  string  Required. The new file content, Base64-encoded.
branch   string  Branch name. Default: repo's default branch.
Run Code Online (Sandbox Code Playgroud)

JSON 输入的最小示例:

{
  "message": "my commit message",
  "content": "bXkgbmV3IGZpbGUgY29udGVudHM="
}
Run Code Online (Sandbox Code Playgroud)

所以你可以编写一个脚本来对文件内容进行 base64 编码,然后使用它curl来发送一些像上面这样的 JSON 到https://api.github.com/repos/:owner/:repo/contents/:path

如果成功,您将收到一个 JSON 响应,其中包含所创建文件的 GitHub URL。

也可以不克隆更新文件:https : //developer.github.com/v3/repos/contents/#update-a-file


Von*_*onC 3

该存储库包含一组相当丰富的二进制文件

正如我在此处解释的那样,这不是 git 存储库的设计目的。

如果没有先获取,您就无法推送某些内容,因此除非您的存储库托管在支持通过其 Web 界面添加文件的服务中(例如 GitHub,如heinrich5991评论),否则您将无法仅导入一个文件。

一种替代方法是拥有一台专用服务器始终托管存储库的完整副本,您可以向其中添加一个文件,然后可以从中推送到目标存储库。