Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Can';是否从git存储库中删除文件?_Git_Github_Delete File - Fatal编程技术网

Can';是否从git存储库中删除文件?

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

我已经将大于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 --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
时,您将更新索引<代码>吉特