Nie mogę nacisnąć na GitHub z powodu dużego pliku, który już usunąłem
Obecnie mam
- Empty GitHub repo
- SSH server repo (main)
- Local Repo
SSH server repo był najbardziej aktualnym repo (miejscem produkcji), więc zrobiłem stamtąd Git clone do lokalnego. Następnie próbowałem zrobić git push
na Githubie.
Wszystko poszło dobrze, ale potem było napisane coś o nazwie pliku.gz jest za duży dla Githuba. Nie potrzebowałem tego pliku, więc uruchomiłem kilka komend Git, aby pozbyć się go z pamięci podręcznej Git, a następnie odepchnąłem na serwer SSH.
Nie widzę lokalnie dużego pliku, ale nadal jest on na serwerze SSH, mimo że git diff
nie zwraca nic, a git push zwraca "wszystko jest aktualne"-i nawet jeśli plik nie jest widoczny w lokalnym repo kiedy próbuję wcisnąć GitHub, wciąż pojawia się błąd
Remote: error: File fpss.smoła.gz to 135.17 MB; to przekracza limit rozmiaru pliku GitHub 100 MB
Wykonałem kroki pod "naprawianie problemu "wymienione w Pomocy GitHub więc czy to nie powinno wystarczyć?
W Jaki Sposób plik jest nadal w ether, jeśli nie jest lokalny lub wymieniony w git status/diff / push?
18 answers
Możesz użyć
git filter-branch --index-filter 'git rm -r --cached --ignore-unmatch <file/dir>' HEAD
Spowoduje to usunięcie wszystkiego z historii tego pliku. Problem polega na tym, że plik jest obecny w historii.
To polecenie zmienia skróty Twoich commitów, co może być prawdziwym problemem, szczególnie w repozytoriach współdzielonych. Nie należy go wykonywać bez zrozumienia konsekwencji.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-01-17 08:00:30
Znalazłem zgniatanie bardziej przydatne niż filter-branch
. Zrobiłem co następuje:
- lokalnie usuń duże pliki.
- Zatwierdź lokalne usuwanie.
- Soft reset back x liczba commitów (dla mnie było to 3):
git reset --soft HEAD~3
. - następnie ponownie wszystkie zmiany razem (AKA squash)
git commit -m "New message for the combined commit"
- Push squashed commit.
przypadek szczególny (od user @lituo): jeśli powyższe nie działa, to możesz mieć ten przypadek. Commit 1 zawiera wciśnięcie dużego pliku i zatwierdzenia 1 nie powiodło się z powodu błędu dużego pliku. Commit 2 usunął duży plik przez git rm --cached [file_name]
, ale wciśnięcie Commita 2 nadal nie powiodło się. Możesz wykonać te same kroki, ale zamiast używać HEAD~3
, Użyj HEAD~2
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-12-06 19:23:48
Oto coś, co uznałem za bardzo pomocne, jeśli już bawiłeś się ze swoim repo, zanim poprosiłeś o pomoc. Pierwszy typ:
git status
Po tym, powinieneś zobaczyć coś w stylu
On branch master
Your branch is ahead of 'origin/master' by 2 commits.
(use "git push" to publish your local commits)
nothing to commit, working tree clean
Ważną częścią jest "2 commity"! Stąd śmiało wpisz:
git reset HEAD~<HOWEVER MANY COMMITS YOU WERE BEHIND>
Tak więc w powyższym przykładzie należy wpisać:
git reset HEAD~2
Po wpisaniu tego, twój "git status" powinien brzmieć:
On branch master
Your branch is up to date with 'origin/master'.
nothing to commit, working tree clean
Stamtąd możesz usunąć duży plik (zakładając, że jeszcze tego nie zrobiłeś) i powinieneś być w stanie ponownie zaangażować wszystko bez utraty pracy.
Wiem, że to nie jest super fantazyjna odpowiedź, ale mam nadzieję, że pomoże!
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-02-23 21:41:54
Jeśli plik został dodany wraz z ostatnim commitem, a Ty nie wepchnąłeś do zdalnego repozytorium, możesz usunąć plik i zmienić commit, pobrany z tutaj:
git rm --cached giant_file
# Stage "giant_file" for removal with "git rm"
# Leave it on disk with "--cached". if you want to remove it from disk
# then ignore the "--cached" parameter
git commit --amend -CHEAD
# Commit the current tree without the giant file using "git commit"
# Amend the previous commit with your change "--amend"
# (simply making a new commit won't work, as you need
# to remove the file from the unpushed history as well)
# Use the log/authorship/timestamp of the last commit (the one we are
# amending) with "-CHEAD", equivalent to --reuse-message=HEAD
git push
# Push our rewritten, smaller commit with "git push"
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-12-03 10:41:39
Miałem podobny problem i użyłem kroku powyżej, aby usunąć plik. Zadziałało idealnie.
Otrzymałem błąd w drugim pliku, który musiałem usunąć:
remote: error: File <path/filename> is 109.99 MB; this exceeds GitHub's file size limit of 100.00 MB
Próbowałem tego samego kroku, dostałem błąd: "A previous backup already exists in <path/filename>"
Z badań tej strony użyłem komendy: git filter-branch --force --index-filter "git rm --cached --ignore-unmatch <path/filename>" --prune-empty --tag-name-filter cat -- --all
Działało świetnie, a duże pliki zostały usunięte.
To naprawiłem bezpośrednio modyfikując the .plik konfiguracyjny git - postBuffer = 999999999
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-30 18:21:39
Dlaczego GitHub odrzuca mój repo, nawet po tym, jak usunąłem duży plik?
Git przechowuje pełną historię twojego projektu, więc nawet jeśli 'usuniesz' plik z twojego projektu, repo Git nadal ma kopię tego pliku w swojej historii, a jeśli spróbujesz przenieść go do innego repozytorium (np. hostowanego na GitHub), to Git wymaga zdalnego repo ma tę samą historię, co twój lokalny repo (tj. te same duże pliki w swojej historii).
Jak mogę zmusić Githuba do zaakceptowania mojego repo?
Musisz wyczyścić historię Gita lokalnie, usuwając niechciane duże pliki z całej historii, a następnie używać tylko "oczyszczonej" historii. Identyfikatory git commit dla tych zmian ulegną zmianie.
Jak wyczyścić duże pliki z mojego Git repo?
Najlepszym narzędziem do czyszczenia niechcianych dużych plików z historii Gita jest BFG Repo-Cleaner - to prostsza i szybsza alternatywa dla git-filter-branch
zaprojektowana specjalnie do usuwania niechcianych plików pliki z historii Gita.
Uważnie postępuj zgodnie z instrukcjami użycia , podstawowa część jest taka:
$ java -jar bfg.jar --strip-blobs-bigger-than 100M my-repo.git
Wszystkie pliki o rozmiarze powyżej 100MB (które nie znajdują się w Twoimnajnowszym commicie) zostaną usunięte z historii Twojego repozytorium Git. Następnie możesz użyć git gc
, aby wyczyścić martwe DANE:
$ git gc --prune=now --aggressive
BFG jest zwykle co najmniej 10-50x szybszy niż bieganie git-filter-branch
i ogólnie dużo łatwiejszy w użyciu.
Pełna wersja: jestem autorem BFG Repo-Cleaner.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-03 15:53:08
Próbowałem wszystkich powyższych metod, ale żadna z nich nie działa dla mnie.
Potem wymyśliłem własne rozwiązanie.
Po pierwsze, potrzebujesz czystego, aktualnego lokalnego repo. Usuń wszystkie pieprzone duże pliki.
Teraz utwórz nowy folder poza folderem repo i użyj "Git create repository here", aby uczynić go nowym repozytorium Git, nazwijmy go new_local_repo. To jest to! Wszystkie powyższe metody mówiły, że trzeba wyczyścić historię... mam dość. to, stwórzmy nowy repo, który w ogóle nie ma historii!
Skopiuj pliki ze starego, zjebanego lokalnego repo do nowego, pięknego repo. Zauważ, że zielone logo na ikonie folderu zniknie, jest to obiecujące, ponieważ jest to nowy repo!
Zatwierdź do lokalnej gałęzi, a następnie wciśnij do zdalnej nowej gałęzi. Nazwijmy to new_remote_branch. Jeśli nie wiesz, jak wypchnąć z nowego lokalnego repo, Wygoogluj go.
Gratulacje! Popchnąłeś Twój czysty, aktualny kod do GitHub. Jeśli nie potrzebujesz już zdalnej gałęzi master, możesz utworzyć new_remote_branch jako nową gałąź master. Jeśli nie wiesz, jak to zrobić, Wygoogluj to.
Ostatni krok, nadszedł czas, aby usunąć pieprzone stare lokalne repo. W przyszłości używasz tylko new_local_repo.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-01-29 05:52:04
Mam ten sam problem i żadna z odpowiedzi nie działa na mnie. Rozwiązałem następujące kroki:
1. Znajdź, które commity zawierają duży plik
git log --all -- 'large_file`
Dolny commit to najstarszy commit na liście wyników.
2. Znajdź tę tuż przed najstarszą.
git log
Załóżmy, że masz:
commit 3f7dd04a6e6dbdf1fff92df1f6344a06119d5d32
3. Git rebase
git rebase -i 3f7dd04a6e6dbdf1fff92df1f6344a06119d5d32
Porady :
- pozycja listy
- wybieram
drop
ponieważ commity zawierają duży plik. - możesz napotkać konflikty podczas rebase napraw je i użyj
git rebase --continue
, aby kontynuować, dopóki go nie skończysz. - jeśli coś poszło nie tak podczas rebase użyj
git rebase --abort
, aby go anulować.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-14 16:13:55
git lfs migrate import --include="fpss.tar.gz"
To powinno ponownie napisać lokalne commity z nowym LFS refs
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-03-10 16:00:10
Rozwiązanie do przechowywania dużych plików / folderów w folderze roboczym
To jest linia, która zadziałała, aby rozwiązać zadany tutaj problem (z odpowiedzi 1):
git filter-branch --index-filter 'git rm -r --cached --ignore-unmatch <file/dir>' HEAD
To polecenie usuwa również plik / katalog, jeśli plik / katalog znajduje się w drzewie roboczym.
Jeśli chcesz zachować plik / folder w działającym drzewie, proponuję wykonać następujące kroki.
- Po tym błędzie uruchom
git reset HEAD^
Dodaj dany plik / folder do ``.gitignore "' plik.
Postępuj jak zwykle
git add .
, które mogą przechwytywać inne pliki / foldery, ale muszą przechwytywać plik.gitignore
. Dalej jestgit commit -m"message"
i wreszciegit push origin <branch_name>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-05-14 18:23:25
Moje niekonwencjonalne, ale proste rozwiązanie od podstaw:
- po prostu zapomnij o swoim ostatnim problematycznym lokalnym repozytorium git i
git clone
Twoje repozytorium do nowego katalogu. git remote add upstream <your github rep here>
git pull upstream master
- w tym momencie wystarczy skopiować nowe pliki, aby zatwierdzić, do nowego lokalnego rep ze starego może zawierać teraz zmniejszone pliki giant.
git add .
git commit -m "your commit text here"
git push origin master
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-06-29 19:28:28
To mi pomogło. dokumentacja z github Squashing Git Commits git reset origin / master
git checkout master && git pull;
git merge feature_branch;
git add . --all;
git commit -m "your commit message"
Znajdź dokumentację tutaj
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-01-03 18:50:05
Napotkałem więc konkretną sytuację: sklonowałem repozytorium z gitlab, które zawierało plik większy niż 100 mb, ale zostało usunięte w pewnym momencie historii Gita. Później, gdy dodałem nowy prywatny repo github i próbowałem wcisnąć do nowego repo, dostałem niesławny błąd "file too large". W tym momencie nie miałem już dostępu do oryginalnego repo gitlab. Mimo to udało mi się wcisnąć do nowego prywatnego repo Githuba używając bfg-repo-cleaner
na lokalnym repozytorium na mojej maszynie:
$ cd ~
$ curl https://repo1.maven.org/maven2/com/madgag/bfg/1.13.0/bfg-1.13.0.jar > bfg.jar
$ cd my-project
$ git gc
$ cd ../
$ java -jar bfg.jar --strip-blobs-bigger-than 100M my-project
$ cd my-project
$ git reflog expire --expire=now --all && git gc --prune=now --aggressive
$ git remote -v # confirm origin is the remote you want to push to
$ git push origin master
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-02-23 21:19:06
Czasami plik jest przechowywany w historii śledzenia, spróbuj wykonać następujące kroki:
-
git commit
, jeśli widzisz create mode z dużym plikiem na liście, wykonaj: -
git filter-branch --index-filter 'git rm -r --cached --ignore-unmatch filename' HEAD
. Powinieneś zobaczyć kilka poprawek w konsoli, które kończą się na:Rm 'nazwa pliku' i
Ostatni wiersz Ref został przepisany.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-06-08 16:14:07
Miałem ten problem, gdy nie miałem pliku gitignore z moim projektem iOS
Myślę, że może próbował wcisnąć ogromny plik do Githuba i github prawdopodobnie odrzucał ten gigantyczny plik or (files)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-08-03 22:02:22
Dodaję do pierwszej odpowiedzi.
Git filter-branch --index-filter 'GIT rm-r --cached --ignore-unmatch' HEAD
Będzie jakiś konflikt merge z origin / master.
Twoja gałąź i 'origin / master' się rozeszły, i mają odpowiednio 114 i 109 różnych commitów. (użyj "git pull", aby połączyć zdalną gałąź z Twoją)
Proszę uruchom to
Git reset --hard origin / master
It wyrzuci wszystkie moje zainscenizowane i nieakcentowane zmiany, zapomni o wszystkim na moim obecnym lokalnym oddziale i sprawi, że będzie dokładnie taki sam jak origin / master.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-01-28 14:49:00
Zamiast robić skomplikowane rzeczy, skopiuj repo (na komputerze) w inne miejsce. Usuń duży plik. popchnij i pociągnij. Wtedy niektóre z Twoich plików będą pomieszane mając takie rzeczy jak "
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-07-04 07:25:56
Spraw, aby lokalny repo pasował do zdalnego repo z:
git reset --hard origin/master
Następnie naciśnij ponownie.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-07-29 23:40:15