我有许多大型二进制文件,源代码在git版本控制下。
我想只将源文件推送到github进行repo初始化。
所以我用git rm -r --cached
从索引中删除了大的二进制文件。
检查git ls-tree -r --names-only mybranch
后,我确认索引中只有文本源文件。
当我推送到github时,git
检查了3千个要传输的文件,并开始将 1GB 内容推送到远程github。但这些源文件只占用53KB。
从日志中我发现历史提交中的二进制文件被推送到远程。
是否只有推送当前索引的选项?喜欢:
git push --depth 1
提前感谢任何建议。
答案 0 :(得分:2)
你有几个选择。
一个简单的方法,如果你很乐意重新初始化你的git repo和“start-fresh”,那就是删除你的.git文件夹并重新初始化它:
rm -rf .git
git init
git add ...
git commit -m"..."
只添加您想要的文件(而不是二进制文件) - 实际上将二进制文件添加到.gitignore文件中,例如如果它们都被称为x.out,y.out,z.out,那么你可以将以下内容添加到你的.gitignore中:
*.out
或者如果它们都在某个输出文件夹中,您可以将以下内容添加到.gitignore:
outputfolder/
如果您想重新添加遥控器,则可以执行以下操作:
git remote add origin <remote-url>
<强>更新强>
如果您需要覆盖遥控器,则可以使用:
git push -f origin master
答案 1 :(得分:2)
历史提交中的二进制文件被推送到远程。
是的,这就是git是如何运作的。
不,那不是git的工作方式。 Git不使用文件,git pull / push / works与提交的直接非循环图(以及随附的对象 - 树和blob)。是否只有推送当前索引的选项?
如果您不想推送大型文件,则必须git filter-branch
或BFG Repo-Cleaner
使用remove them from the entire history。
如果要删除整个历史记录,可以创建新的孤立分支,从索引创建提交并推送新分支。然后可以删除旧分支,并且可以将新分支重命名为master
。