这个 Git 问题与另一个关于 SVN的问题非常相似。
我有一个充满大文件的仓库,我需要向其中添加一个文件。这在 SVN 中曾经非常容易。
svn import -m "Adding just a file" file_name http://path/to/svn/repo/file_name
如何在 Git 中完成这个简单的任务?
这个 Git 问题与另一个关于 SVN的问题非常相似。
我有一个充满大文件的仓库,我需要向其中添加一个文件。这在 SVN 中曾经非常容易。
svn import -m "Adding just a file" file_name http://path/to/svn/repo/file_name
如何在 Git 中完成这个简单的任务?
对于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.
最小的 JSON 输入示例:
{
"message": "my commit message",
"content": "bXkgbmV3IGZpbGUgY29udGVudHM="
}
因此,您可以编写一个脚本来对文件内容进行 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
该 repo 包含一组相当丰富的二进制文件
正如我在这里解释的那样,这不是 git repo 的设计目的。
你不能在没有先获取的情况下推送一些东西,所以除非你的 repo 托管在一个支持通过其 Web 界面添加文件的服务中(如 GitHub,正如heinrich5991评论的那样),你将无法只导入一个文件。
一种替代方法是让专用服务器始终托管您的存储库的完整副本,您可以向其中添加一个文件,然后您可以从中推送到目标存储库。
没有办法做到这一点。我刚刚做了以下测试:
mkdir hello_independent
(注意:“hello”是我以前的存储库的名称)git init
(注意:在这里创建一个空白的存储库)git remote set-url origin https://github.com/solio/GitPractice.git
(注意:设置本地仓库指向远程仓库。)vim newfilefromindependentfolder.md
(注意:添加一个新文件)git add --a
git commit -m "test commit from independent folder."
git push origin master
(注:此操作是关键)它会显示这个错误:(对不起,我无法上传我的操作图像和没有 10 声望的提示消息)
这是我对消息的理解:当我这样做时,有两个不同的独立工作流程,它们没有任何关系。因此,当您要将独立文件提交到远程存储库时,您必须合并本地存储库和远程存储库。所以最好解决这个问题的方法是 git clone 远程存储库。