Git push - изберете: Няма достатъчно памет

За проект за разработка на игри имаме git repo, което има големи двоични файлове. Те варират между 10-70MB и ~700MB в общ размер на касата.

Използвам следния софтуер:

  • Windows 7 64-битова
  • Git [git версия 1.9.4.msysgit.2] + open-ssh
  • Windows клиент на Tortoise 64-битов

Когато се опитвам да натисна (първоначално натискане) към github, получавам следната грешка (винаги около напредък от ~170MB):

git.exe push -v --progress  "origin" master:master

Pushing to [email protected]:totallymorten/ue4-test.git
Counting objects: 407, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (402/402), done.
select: Not enough memory
fatal: sha1 file '<stdout>' write error: Invalid argument
fatal: The remote end hung up unexpectedly
error: failed to push some refs to '[email protected]:totallymorten/ue4-test.git'


git did not exit cleanly (exit code 1) (573007 ms @ 12-11-2014 16:50:48)

Смешното е, че ако опитам точно същото на моята работна станция с linux, то работи!

Опитах всички комбинации от използване на Putty plink вместо OpenSSH и също така опитах https:// за алтернативен протокол. Досега нищо не работи на windows. Все пак получавам друго съобщение за грешка с https:// и подозирам, че мога да увелича размера на POST буфера, за да работи... но наистина бих предпочел SSH.

Знам, че има различни заобикалящи решения като подмодули и git-annex и има други публикации като:

грешка при разпределяне на паметта на git-clone

Преопаковането на хранилището на Git е неуспешно

но не намерих нищо, което наистина да помогне на моя проблем.

Всеки коментар се оценява,

Благодаря,

Мортен.


person Morten Madsen    schedule 12.11.2014    source източник
comment
обикновено двоичните файлове трябва да бъдат изключени от вашия SCM поради точно този проблем. Ако можете, трябва да ги преместите на някакъв споделен диск като Copy, Google Drive, Dropbox и т.н.   -  person ddavison    schedule 12.11.2014


Отговори (2)


Git е създаден за контрол на версиите, така че малки файлове с код или текст например.

Статичните файлове и особено големите файлове трябва да бъдат изключени от вашия GIT, защото имате точно този проблем. Така че направете нова папка и изключете тези двоични файлове и няма да имате проблеми.

Поставете тази папка във вашия .gitignore.

Разгледайте този проект. Ако имате нужда от този контрол на версиите за вашите големи файлове

https://git-annex.branchable.com

person René Höhle    schedule 12.11.2014
comment
Напълно съм съгласен с тази оценка, просто се чудя защо работи на Linux? Трябва да означава, че внедряването на Windows е погрешно? - person Morten Madsen; 13.11.2014
comment
Може би е 32-битов. Тогава нямате достатъчно памет / вътрешната структура. - person René Höhle; 13.11.2014
comment
Това може да бъде. Поне виждам, че процесът openSSH е 32-битов. ... хм може би мога да го компилирам сам или да намеря 64-битова версия? Добра точка! - person Morten Madsen; 13.11.2014
comment
Можете да го опитате. Но сами да компилирате git под Windows може да бъде много трудно ^^ - person René Höhle; 13.11.2014
comment
Хм, изглежда като msysgit самокомпилиращата се версия работи (git 2.x). Това изтегляне автоматично ще се компилира в Windows. - person Morten Madsen; 13.11.2014

Добре, така че най-накрая го накарах да работи:

  • Инсталиране на 64-битов CygWin и след това използване на 64-битовата версия на git (просто изберете да инсталирате git, когато изберете компоненти) работи безупречно.
  • Недостатък е, че не можете да използвате графични клиенти като TortoiseGit с него. Някои хора го накараха да работи с помощта на обвивка, но аз имам затруднения да накарам всичко да работи... Така че засега ще се придържам към клиента на командния ред.

** РЕДАКТИРАНЕ **

Всъщност МОЖЕТЕ да използвате sourcetree директно с CygWin + git 64-bit. Просто посочете изпълнимия файл на git в настройките на изходното дърво по следния начин:

  • git двоичен: c:\cygwin64\bin
  • външен dll: c:\cygwin64\bin

И работи!!

Все пак имах някои проблеми с TortoiseGit, но те бяха най-вече:

  • TortoiseGit открива всички файлове като "модифицирани", когато правите "проверка за модификация". Не знам дали това е свързано с Cygwin.
  • Когато даден файл е модифициран, не мога да направя операция „Добавяне“ в TortoiseGit. Въпреки това мога да го ангажирам директно с действието от менюто „Ангажиране към мастер“.
person Morten Madsen    schedule 13.11.2014