Git push - выберите: недостаточно памяти

Для проекта разработки игр у нас есть репозиторий git с большими двоичными файлами. Они варьируются от 10-70 МБ до ~ 700 МБ в общем размере проверки.

Я использую следующее программное обеспечение:

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

Когда я пытаюсь нажать (начальный толчок) на github, я получаю следующую ошибку (всегда около 170 МБ):

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:// в качестве альтернативного протокола. На окнах пока ничего не работало. Тем не менее, я получаю другое сообщение об ошибке с https:// и подозреваю, что могу увеличить размер буфера POST, чтобы заставить его работать... но я бы предпочел SSH.

Я знаю, что существуют различные обходные пути, такие как подмодули и git-приложение, и есть другие сообщения, такие как:

ошибка выделения памяти 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

Итак, я, наконец, заставил это работать:

  • Установка CygWin 64-bit и последующее использование 64-разрядной версии git (просто выберите установку git при выборе компонентов) работает без нареканий.
  • Недостатком является то, что вы не можете использовать с ним графические клиенты, такие как TortoiseGit. Некоторые люди заставили его работать с помощью оболочки, но я У меня трудности с тем, чтобы заставить все работать... Так что пока я буду придерживаться клиента командной строки.

** РЕДАКТИРОВАТЬ **

На самом деле вы МОЖЕТЕ использовать исходное дерево напрямую с CygWin + git 64-бит. Просто укажите исполняемый файл git в настройках исходного дерева следующим образом:

  • Двоичный файл git: c:\cygwin64\bin
  • внешняя dll: c:\cygwin64\bin

И это работает!!

У меня были некоторые проблемы с TortoiseGit, но в основном это были:

  • TortoiseGit определяет все файлы как «модифицированные», когда вы выполняете «проверку модификации». Не знаю, связано ли это с Cygwin.
  • Когда файл изменен, я не могу выполнить операцию «Добавить» в TortoiseGit. Я могу зафиксировать это напрямую с помощью действия меню «Зафиксировать в мастере»...
person Morten Madsen    schedule 13.11.2014