Подтвердить что ты не робот

Git svn - ошибка под cygwin

У меня есть cygwin и git. Я пытаюсь передать с помощью git в svn - git svn dcommit. Но он терпит неудачу со странной ошибкой:

$ git svn dcommit
      4 [main] perl 5536 C:\cygwin\bin\perl.exe: *** fatal error - unable to remap \\?\C:\cygwin\lib\perl5\5.10\i686-cygwin\auto\List\Util\Util.dll to same address as parent: 0xA20000 != 0xB40000
Stack trace:
Frame     Function  Args
0088B508  6102749B  (0088B508, 00000000, 00000000, 00000000)
0088B7F8  6102749B  (61177B80, 00008000, 00000000, 61179977)
0088C828  61004AFB  (611A136C, 6125AB3C, 00A20000, 00B40000)
End of stack trace

Как я могу это исправить? Спасибо.

P.S. Моя система - это Windows 7 64 бит.

Обновление

reabase. но мне пришлось перезагрузиться после выполнения rebase.

4b9b3361

Ответ 1

Вы пробовали rebaseall как описано здесь?

Когда вы работаете с Cygwin, иногда вы получаете сообщение об ошибке, подобное этому

unable to remap some.dll to same address as parent someapp 4292 fork:
child 3964 - died waiting for dll loading, errno 11"

Тогда вам нужно будет запустить rebaseall.
Чтобы запустить его, закройте все окна Cygwin, <cygwin_home>\bin\ash.exe. Откроется новое окно консоли. Выполните rebaseall там.
Как только он завершится, вы можете без проблем вернуться к запуску Cygwin :-)


В OP Gor отчеты ему пришлось перезагрузиться, чтобы rebaseall работы.
Дэн Молдинг упоминает в комментариях:

Я просто добавлю, что закрытия всех окон Cygwin может быть недостаточно.
Вы должны убедиться, что все процессы и сервисы Cygwin завершены и/или остановлены (ps -a из ash должно показывать ничего, кроме ash и ps) перед перебазированием.


rsenna сообщает в комментариях:

Для объяснения того, почему это необходимо, смотрите fatal error - unable to remap to same address as parent: Cygwin, Ruby on Rails, системные вызовы

Так что же на самом деле происходит?
Ну, в этом случае проблема была результатом способа, которым Windows управляет своими .dll.

Windows использует ASLR (рандомизацию размещения адресного пространства) для управления своими .dll. Он загружает вашу dll в разные области памяти каждый раз при загрузке компьютера.
Если это выйдет из строя, то в следующий раз, когда вы будете искать этот .dll - вы можете потерпеть крах вашей системы. Или, если вы посмотрите не в том месте, вы можете сломать вашу систему.
Так как же эта система может выйти из строя? Что ж, запуск вашей программы установки cygwin может повлиять на ведение записей, особенно если ASLR изменился, но Cygwin удерживает более старую копию (это может произойти, когда установка не завершена).

ASLR - отличная защита от вредоносных программ или хакеров. Хакеры не могут постоянно пробовать новые адреса для вашего .dll без сбоя вашей системы.

Ответ 2

У меня была эта проблема, но запуск rebaseall не устранил бы проблему. Я пытался запустить git svn dcommit и видеть упомянутые ошибки переназначения независимо от того, сколько раз я запускал rebaseall и/или перезагружался.

Вот пример того, что я видел. Обратите внимание на ссылку на адрес 0x6FA00000

$git svn dcommit Выполнение     844 [main] perl 1136 C:\cygwin\bin\perl.exe: * фатальный ошибка - невозможно перенаправить C:\cygwin\bin\cygdb-4.5.dll к тому же адрес как родитель: 0x58B40000 != ** 0x6FA00000 Трассировка стека: рамка
Функция Args 0082B458 6102792B (0082B458, 00000000, 00000000, 00000000) 0082B748 6102792B (6117DC60, 00008000, 00000000, 6117F977) 0082C778 61004F3B (611A6FAC, 61247BCC, 58B40000, 6FA00000) Конец трассировки стека       3 [основной] perl 4680 fork: ребенок 1136 - умер, ожидая загрузки dll, errno 11

Я не думаю, что это важно, но я работаю на Windows 7 Enterprise 32 бит, используя корпоративный образ компании.

Я смог исправить это, следуя советам, которые я нашел в Chromium wiki:

http://code.google.com/p/chromium/wiki/CygwinDllRemappingFailure

Я использовал ListDlls.exe(http://technet.microsoft.com/en-us/sysinternals/bb896656.aspx) из cygwin для захвата вывода DLL, загруженных в запущенные процессы и grep'ed для адреса, вызывающего проблемы:

$./ListDlls.exe | tee foo
$ cat foo | grep 6fa000

...

0x6fa00000 0x3c000 9.05.0005.9574 C:\PROGRA ~ 1\Sophos\SOPHOS ~ 1\SOPHOS ~ 1.DLL

Этот согласованный адрес загрузки DLL, предоставляемый Sophos Security, который моя ИТ-группа работает на наших машинах по умолчанию и является причиной сбоя. у rebaseall не было возможности исправить проблему, потому что предоставленная Sophos DLL не является частью cygwin.

Chromium wiki сказал, чтобы выбрать базовый адрес меньше, чем DLL, вызывающий проблему, поэтому я выбрал 0x60000000. Возможно, вам придется выбрать другой базовый адрес в зависимости от злоумышленной DLL, которую вы можете увидеть.

Я переустанавливаю rebaseall из приглашения cmd.exe и никаких других процессов cygwin не работает.

c:\cygwin\bin > ash/usr/bin/rebaseall -b 0x60000000

После перезагрузки моей оболочки cygwin git svn dcommit сработал.

Ответ 3

Столкнувшись с подобными проблемами, он не прошел, пока я не побежал 1. rebaseall 2. perlrebase 3. peflagsall

запустить их все, чтобы устранить проблему

Ответ 4

Вышеупомянутые ответы не привели к надежному исправлению проблемы с запуском cygwin git на 64-битной Windows (Windows 7) для нашей команды. Я отправил вопрос о рассылке git и получил этот ответ от Паскаля Обри:

Джон

Это известная проблема. С тех пор я давно покинул мир Windows, но У меня все еще есть заметки, чтобы "исправить" это:

Из оболочки пепла (убедитесь, что процесс Cygwin еще не запущен):

$rebaseall

$peflagsall

Повторите попытку. Если он все еще не работает, попробуйте вместо этого: $rebaseall -b 0x50000000 -o 0x80000 или -b 0xNNNN0000, где NNNN - любое шестнадцатеричный номер между 2000 и 7000. Опция -o говорит, чтобы оставить больше пространство между DLL, это также может помочь. Это было в моем случае.

Если вам интересно, посмотрите /usr/share/doc/Cygwin/rebase -3.0.README для более подробного объяснения.

Смотрите также: http://www.spinics.net/lists/git/msg183753.html

Паскаль также отметил в следующем:

... самая важная часть - это запуск peflagsall, это был способ исправьте это на Win7 IIRC.

Исходные, но не окончательные результаты показывают, что это решение работает лучше, чем другие рекомендации, описанные здесь. Я обновлю это сообщение через неделю или около того, чтобы указать, достаточно ли этого рецепта, чтобы получить постоянное и надежное решение.