如何只推送当前索引中的文件?

时间:2018-04-14 15:37:40

标签: linux git github version-control

我有许多大型二进制文件,源代码在git版本控制下。

我想只将源文件推送到github进行repo初始化

所以我用git rm -r --cached从索引中删除了大的二进制文件。

检查git ls-tree -r --names-only mybranch后,我确认索引中只有文本源文件。

当我推送到github时,git检查了3千个要传输的文件,并开始将 1GB 内容推送到远程github。但这些源文件只占用53KB。

从日志中我发现历史提交中的二进制文件被推送到远程

是否只有推送当前索引的选项?喜欢:

git push --depth 1

提前感谢任何建议。

2 个答案:

答案 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-branchBFG Repo-Cleaner使用remove them from the entire history

如果要删除整个历史记录,可以创建新的孤立分支,从索引创建提交并推送新分支。然后可以删除旧分支,并且可以将新分支重命名为master