Can';是否从git存储库中删除文件?
我已经将大于100MB的文件添加到我的git存储库中,并且它在本地git中工作。不幸的是,github有100MB的限制 所以,我重写了代码,使它不需要这个大文件,然后删除它,然后提交 不幸的是,我仍然无法推送到gothub,因为文件仍然在存储库中 我试着跑Can';是否从git存储库中删除文件?,git,github,delete-file,Git,Github,Delete File,我已经将大于100MB的文件添加到我的git存储库中,并且它在本地git中工作。不幸的是,github有100MB的限制 所以,我重写了代码,使它不需要这个大文件,然后删除它,然后提交 不幸的是,我仍然无法推送到gothub,因为文件仍然在存储库中 我试着跑 git rm --cached my_file.dat git rm --cached -r my_file.dat git rm --cached mypath/my_file.dat java -jar bfg.jar --str
git rm --cached my_file.dat
git rm --cached -r my_file.dat
git rm --cached mypath/my_file.dat
java -jar bfg.jar --strip-blobs-bigger-than 100M
所有命令都失败了
fatal: pathspec ... did not match any files
如何删除不指定确切路径的文件
更新
我试着跑
git rm --cached my_file.dat
git rm --cached -r my_file.dat
git rm --cached mypath/my_file.dat
java -jar bfg.jar --strip-blobs-bigger-than 100M
它失败了,并发出了一条消息
Scanning packfile for large blobs completed in 2 ms.
Warning : no large blobs matching criteria found in packfiles - does the repo need to be packed?
但仍然无法
git push origin master
与
您需要以某种方式从所有提交中删除此文件 有几种方法可以做到这一点:
- 如果要编辑的提交数量相当少:
使用
手动编辑提交git-rebase-i
- 如果必须大规模执行(多个提交、多个分支):
使用git筛选器分支--索引筛选器
或者@Sirko建议的
bfg回购清洁剂
如何使用git rebase-i: 如果您的历史记录如下所示:
big file added here
v
--*--A--B--C--D--E--F <- master
这将打开一个文本编辑器,它将询问您在从B
到F
首先是:
pick B message
pick C message
pick D message
...
您要更改B
,以从此提交中删除大文件
# set the action on b to 'edit' (or e) :
e B message
pick C message
pick D message
...
保存并关闭
现在git将应用您告诉他的操作:
- 他会将您的回购回退至
A
- 你告诉git编辑
:他将应用B
,然后停止,这样你就可以做任何你想做的事情B
- 要从此提交中删除大文件,请执行以下操作:
git rm --cached big/file git commit --amend
- 现在,您要告诉git重新设置基址:
git rebase --continue
- 您应该会看到一些消息,指示git正在重播C,然后是D。。高达F
- 如果要编辑的提交数量相当少:
使用
手动编辑提交git-rebase-i
- 如果必须大规模执行(多个提交、多个分支):
使用git筛选器分支--索引筛选器
或者@Sirko建议的
bfg回购清洁剂
如何使用git rebase-i: 如果您的历史记录如下所示:
big file added here
v
--*--A--B--C--D--E--F <- master
这将打开一个文本编辑器,它将询问您在从B
到F
首先是:
pick B message
pick C message
pick D message
...
您要更改B
,以从此提交中删除大文件
# set the action on b to 'edit' (or e) :
e B message
pick C message
pick D message
...
保存并关闭
现在git将应用您告诉他的操作:
- 他会将您的回购回退至
A
- 你告诉git编辑
:他将应用B
,然后停止,这样你就可以做任何你想做的事情B
- 要从此提交中删除大文件,请执行以下操作:
git rm --cached big/file git commit --amend
- 现在,您要告诉git重新设置基址:
git rebase --continue
- 您应该会看到一些消息,指示git正在重播C,然后是D。。高达F
git-rebase-i${COMMIT\u ID}^
这将为您提供一个提交列表,您可以在其中选择编辑
或删除
某些项目。通过将默认的pick
替换为drop
以简单地将其删除(和提交所做的所有其他更改!),或者使用edit
标记有问题的提交,删除文件,重新提交并继续
完成此操作后,请尝试再次推动
Git并不是为大型二进制文件而设计的,所以避免签入它们。
如果您“需要”,那么可能值得检查该项目。该文件仍在存储库的历史记录中。。。您需要删除引入它的提交 如果可以清楚地识别引入它的提交,请尝试以下操作:
git-rebase-i${COMMIT\u ID}^
这将为您提供一个提交列表,您可以在其中选择编辑
或删除
某些项目。通过将默认的pick
替换为drop
以简单地将其删除(和提交所做的所有其他更改!),或者使用edit
标记有问题的提交,删除文件,重新提交并继续
完成此操作后,请尝试再次推动
Git并不是为大型二进制文件而设计的,所以避免签入它们。
如果您“需要”,那么可能值得查看该项目。顺便说一句,完全删除该文件是最简单的选择(尽管如您所见,它并不完全简单),前提是您不需要在回购中使用该文件。另一种选择是使用类似于
git lfs
的工具,允许您的回购协议引用该文件,而无需将该文件直接放入回购协议中。这解决了与git
中的大型文件相关的许多问题,如果您确实需要该文件,则应予以考虑;但重写回购协议以对已提交的文件使用lfs
是另一个完整的主题
那么,回到搬迁问题上来。要提供更多的上下文,请执行以下操作:
在git中,有三个地方可以找到文件
1) 工作树-只是您处理的普通文件git
在这里不做任何特殊的工作来保存数据,它只存在于本地。您可以通过git
之外的方式或使用git-rm
从此处删除文件(特别是如果您还需要从索引中删除文件)
2) 索引-这是文件“暂存”以进行新提交的位置。当您说git add
时,您将更新索引<代码>吉特