这个Git问题与关于SVN的another one非常相似。
我有一个充满大文件的回购,我需要添加一个文件。这在SVN中非常容易。
svn import -m "Adding just a file" file_name http://path/to/svn/repo/file_name
如何在Git中实现这个简单的任务?
答案 0 :(得分:3)
没有办法做到这一点。我刚做了一个测试:
mkdir hello_independent
(注意:“你好”是我之前的知识库名称)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远程存储库。
答案 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),您将无法只导入一个文件。
另一种方法是让一台专用服务器随时托管您的仓库的完整副本,您可以添加一个文件,然后从中推送到目标仓库。