通过GIT推送大文件的问题

时间:2013-11-08 11:57:52

标签: github

目前,当我尝试推送到Git仓库时,我收到以下错误。

remote: error: GH001: Large files detected.
remote: error: Trace: 7bbfe5c1099cfe679aa3cd1eee13e10a
remote: error: See http://git.io/iEPt8g for more information.
remote: error: File e3384023be667de7529538b11c12ec68.201307290946.sql.gz is 125.37 MB; this exceeds GitHub's file size limit of 100 MB

我已经完成并确保该文件在目录中不存在,并且已经完成了git add -u,我们已经尝试修剪分支但是这不起作用,因为它无法找到要删除的文件。

非常感谢任何帮助。

6 个答案:

答案 0 :(得分:29)

您可能正在推送多个提交,其中一个提交包括一个大文件,另一个提交删除该文件。

在任何情况下,您都可以尝试(如“Fixing the “this exceeds GitHub’s file size limit of 100 MB” error”中所述,过滤分支(如果您知道您无法看到的大文件的名称/路径)

git filter-branch --index-filter 'git rm --cached --ignore-unmatch e3384023be667de7529538b11c12ec68.201307290946.sql.gz' <sha1>..HEAD

或者,如果您不知道但想要删除任何大文件(例如&gt; 90MB),您可以使用 BFG repo cleaner

bfg --strip-blobs-bigger-than 90M  my-repo.git

这将在您的回购历史记录中跟踪您难以捉摸的大文件并将其删除 请注意,之后您必须执行git push --force,因为最近提交的历史记录将被修改。
如果其他人之前已经克隆过你的回购,那么为了警告他们,需要进行一些沟通。

答案 1 :(得分:24)

在我的情况下,我用这个链接修复了它:

GitHub Help | Working with large files

注意它在哪里说 giant_file (我没注意到)

$ git filter-branch --force --index-filter \
  'git rm --cached --ignore-unmatch giant_file' \
  --prune-empty --tag-name-filter cat -- --all

$ git commit --amend -CHEAD

$ git push

答案 2 :(得分:4)

如果你有几个大文件,你需要运行另一个命令:

git filter-branch --index-filter 'git rm --cached --ignore-unmatch largfile1'
git filter-branch --index-filter 'git rm --cached --ignore-unmatch largefile2'
Cannot create a new backup.
A previous backup already exists in refs/original/
Force overwriting the backup with -f

你需要运行

git update-ref -d refs/original/refs/heads/master

然后你可以运行git filter-branch命令

希望这有助于你

答案 3 :(得分:2)

使用filter-branch删除文件

git filter-branch --tree-filter 'rm -rf your/file/path/task.txt' HEAD

确保您必须添加rm -rf

在此之后输入代码

git push origin master -f

答案 4 :(得分:0)

首先,需要解决未暂存的提交。使用public static void main(String[] args) { Scanner in = new Scanner(System.in); System.out.print("Please enter a number between 5 and 10, inclusively: "); int userInput = in.nextInt(); in.nextLine(); System.out.print("Please enter a string of length 6 characters: "); String textToChange = in.nextLine(); int length = 6; // Print error if text is not 6 characters long. while (textToChange.length() != 6) { System.out.println("Error! Enter a string of length 6."); in.nextLine(); textToChange = in.nextLine(); } //new array list for results of random text generated ArrayList<String> randomTextArray = new ArrayList<>(); // If input is 6 characters, print out randomText X amount of times, depending on the user's specification of user. if (textToChange.length() == 6) { for (int i = 1; i <= userInput; i++) { String randomText = ""; // Initialise array to create random order of chars. Random rand = new Random(); char[] text = new char[length]; for (int a = 0; a < length; a++) { text[a] = textToChange.charAt(rand.nextInt(textToChange.length())); } // Take the chars from array and concatenate them into a string of the same size as the text variable. for (int a = 0; a < text.length; a++) { randomText += text[a]; } randomTextArray.add(randomText); System.out.printf(randomText + "\n"); } System.out.printf("Odd Characters \n"); String oddCharsOfRandomText = ""; for (int i=0; i < randomTextArray.size(); i++) { if (!(i%2 == 0)) { //resolve true only if we are in an odd line for (int x=0; x <= randomTextArray.get(i).length(); x++ ){ if (!(x%2 == 0)) { //resolve true only if we are in an odd character oddCharsOfRandomText += randomTextArray.get(i).charAt(x); } } } } System.out.printf(oddCharsOfRandomText + "\n"); } in.close(); }

提交这些文件

git status

提交这些文件

git status -s | grep D

然后运行此

git status -s | grep M

一旦执行了以上命令,就会重复提交历史记录以查找大文件并将其删除。

答案 5 :(得分:0)

以下是可以推入大于100MB的对象的步骤:

  1. 安装git-lfs的说明可以在this table

    中找到
  2. 假设您有*.jar个大于100 MB的文件,然后运行git lfs track "*.jar。您应该看到类似

    跟踪“ * .jar”

  3. git add .

  4. git push -u origin master

您应该看到类似这样的内容:

Uploading LFS objects:  89% (398/447), 864 MB | 1.8 MB/s