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

时间:2013-10-27 14:56:22

标签: git svn github

这个Git问题与关于SVN的another one非常相似。

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

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

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

3 个答案:

答案 0 :(得分:3)

没有办法做到这一点。我刚做了一个测试:

  1. mkdir hello_independent(注意:“你好”是我之前的知识库名称)
  2. git init(注意:在这里创建一个空白的存储库)
  3. git remote set-url origin https://github.com/solio/GitPractice.git(注意:将本地存储库指向远程存储库。)
  4. vim newfilefromindependentfolder.md(注意:添加新文件)
  5. git add --a
  6. git commit -m "test commit from independent folder."
  7. git push origin master(注意:此操作是关键)
  8. 它会显示此错误:(抱歉,我无法上传我的操作图像和没有10个声誉的提示消息)

    这是我对该消息的理解:当我这样做时,有两个不同的独立工作流,它们没有任何关系。所以当你想要将独立文件提交到远程存储库时,你必须合并本地存储库和远程。因此解决这个问题的最佳方法是使用git clone远程存储库。

答案 1 :(得分:3)

对于 GitHub 至少(不是git本身),the 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

如果成功,则会获得包含所创建文件的GitHub URL的a JSON response back

还可以在不克隆的情况下更新文件:https://developer.github.com/v3/repos/contents/#update-a-file

答案 2 :(得分:2)

  

回购包含一组相当肥胖的二进制文件

这不是git repo的设计目标,如I explained here

如果没有首先获取内容,则无法推送内容,因此除非您的repo托管在支持通过其Web界面添加文件的服务中( like GitHub ,否则为{{3}通过commented),您将无法只导入一个文件。

另一种方法是让一台专用服务器随时托管您的仓库的完整副本,您可以添加一个文件,然后从中推送到目标仓库。