Gunakan cygwin yang dapat dieksekusi di skrip git bash

9

Saya memiliki .shskrip yang saya klik dua kali untuk menjalankannya oleh git untuk Windows.

Sekarang saya perlu (imagemagick) convertdari cygwin (yang telah saya instal) dan saya menyebutnya dengan jalur absolutnya - /c/cygwin64/bin/convert.exe- tapi saya dapat:

kesalahan fatal - ketidakcocokan basis cygheap terdeteksi. Masalah ini mungkin karena menggunakan versi yang tidak kompatibel dari cygwin DLL.

Membungkus convertpanggilan sebenarnya dalam panggilan bash cygwin, atau bahkan dalam cmd.exepanggilan, tidak membantu. Ini agak aneh karena saya kadang-kadang menggunakan executable cygwin langsung dalam .cmdskrip, dan itu selalu berhasil.

Apa yang dapat saya? Solusi yang membuat program saya terbatas pada satu file akan lebih disukai.

(Saya tahu saya mungkin hanya dapat menginstal imagemagick Windows-asli. Tapi kemudian hari berikutnya saya membutuhkan alat cygwin lain dalam git-for-Win-Shellscript .. juga, saya ingin memahami apa yang terjadi di sini. Dan, ya, Saya mungkin akan membuat git untuk Windows usang di tempat kerja saya , jika mungkin)

SomeDev
sumber
Jangan mencampur dan mencocokkan produk yang berbeda berdasarkan Cygwin. Gunakan Cygwin git sebagai gantinya.
DavidPostill
Terima kasih atas komentar Anda. Tidak jelas bagi saya bahwa git untuk Windows didasarkan pada cygwin. Saya terus menerus membaca "MinGW" .. "MSYS" dll. Yang tidak terdengar seperti cygwin. Tetapi hanya untuk rasa ingin tahu: produk apa lagi yang berbasis cygwin?
SomeDev
Dan apakah saya benar bahwa Alat UnxUtils / GnuWin32 asli Windows? Benarkah Microsoft sedang mengerjakan semacam "Linux-like environment" di Windows (termasuk bash dan mungkin hal-hal baik lainnya)?
SomeDev
"Tidak jelas bagiku bahwa git untuk Windows didasarkan pada cygwin" Aku menebak berdasarkan pesan kesalahan dll. Bisakah Anda memeriksa apakah Anda memiliki beberapa copes dari cygwin dll di sistem Anda?
DavidPostill
Windows 10 Anniversary Edition memperkenalkan fitur baru yang disebut Windows Subsystem untuk Linux. Itu termasuk bash. Saya tidak menjalankan Windows 10 jadi saya tidak tahu apa lagi yang termasuk di dalamnya.
DavidPostill

Jawaban:

7

kesalahan fatal - ketidakcocokan basis cygheap terdeteksi.

Masalah ini mungkin karena menggunakan versi yang tidak kompatibel dari cygwin DLL.

Kesalahan ini disebabkan karena jalur Git untuk Windows tidak kompatibel dengan Cywin.

  • Keduanya menggunakan /bindan /usr/bintetapi memetakan ini ke direktori yang berbeda (karena mereka menggunakan tabel mount yang berbeda).

  • Cywin berharap untuk menemukan dll di /usr/bin/cygwin1.dll(dan tidak ditemukan di Git untuk Windows)

  • Ketika Anda secara eksplisit menjalankan setiap perintah Cygwin dalam Git untuk Windows bashshell Cygwin tidak dapat menemukan dll dan menghasilkan pesan error di atas.

  • Perhatikan di bawah bahwa pemetaan mount untuk /berbeda.

Git untuk Windows:

DavidPostill@Hal MINGW64 ~
$ mount
C:/temp on /tmp type ntfs (binary,noacl,posix=0,usertemp)
C:/apps/Git on / type ntfs (binary,noacl,auto)
C:/apps/Git/usr/bin on /bin type ntfs (binary,noacl,auto)
C: on /c type ntfs (binary,noacl,posix=0,user,noumount,auto)
E: on /e type vfat (binary,noacl,posix=0,user,noumount,auto)
F: on /f type ntfs (binary,noacl,posix=0,user,noumount,auto)

DavidPostill@Hal MINGW64 ~
$ which cygwin1.dll
which: no cygwin1.dll in (/c/Users/DavidPostill/bin:/mingw64/bin:/usr/local/bin:/usr/bin:/bin:/mingw64/bin:/usr/bin:/c/Users/DavidPostill/bin:/c/Windows/system32:/c/Windows:/c/Windows/System32/Wbem:/c/Windows/System32/WindowsPowerShell/v1.0:/c/apps/WSCC/Sysinternals Suite:/c/apps/WSCC/NirSoft Utilities:/c/apps/Calibre:/cmd:/mingw64/bin:/usr/bin:/usr/bin/vendor_perl:/usr/bin/core_perl)

DavidPostill@Hal MINGW64 ~
$ /c/cygwin/bin/man
      1 [main] man (608) C:\cygwin\bin\man.exe: *** fatal error - cygheap base mismatch detected - 0x180301408/0x180304408.
This problem is probably due to using incompatible versions of the cygwin DLL.
Search for cygwin1.dll using the Windows Start->Find/Search facility
and delete all but the most recent version.  The most recent version *should*
reside in x:\cygwin\bin, where 'x' is the drive on which you have
installed the cygwin distribution.  Rebooting is also suggested if you
are unable to find another cygwin DLL.
Segmentation fault

Cygwin:

$ mount
C:/cygwin/bin on /usr/bin type ntfs (binary,auto)
C:/cygwin/lib on /usr/lib type ntfs (binary,auto)
C:/cygwin on / type ntfs (binary,auto)
C: on /c type ntfs (binary,posix=0,user,noumount,auto)
E: on /e type vfat (binary,posix=0,user,noumount,auto)
F: on /f type ntfs (binary,posix=0,user,noumount,auto)
$ which cygwin1.dll
/usr/bin/cygwin1.dll
$ /c/cygwin/bin/man
What manual page do you want?

Tidak ada solusi, selain tidak mencampur dan mencocokkan utilitas turunan cygwin. Pilih satu dan pertahankan.

DavidPostill
sumber
1
Terima kasih untuk penjelasannya. Bagaimana dengan solusinya?
Jim G.
4
@ Jim. Tidak ada satu, selain tidak mencampur dan mencocokkan utilitas turunan cygwin. Pilih satu dan pertahankan.
DavidPostill
1
Tidak membantu karena tidak ada petunjuk untuk membantu dengan solusi. Ini terjadi bagi banyak orang yang tidak memiliki pengetahuan untuk mengetahui apa yang menyebabkannya.
Julian Knight
1
Sayangnya, saya sekarang mendapatkan ini dengan semua yang berhubungan dengan git. Saya telah menginstal versi baru tetapi saya tidak menggunakan cygwin secara eksplisit, hanya git. Saya bahkan tidak dapat memulai baris git cmd. Jadi saya tidak bisa melacak apa yang menyebabkan masalah dan memperbaikinya. Masih mengerjakan ini untuk melihat apakah itu membantu: github.com/desktop/desktop/issues/3096
Julian Knight
2
Diperbaiki melalui solusi di tautan github. Matikan ASLR untuk semua executable yang salah di Windows Exploit Protection. Itu kemudian bekerja. Tidak perlu menghapus git untuk Windows. Itu melakukannya dengan menambahkan nama program (misalnya uname.exe) daripada path lengkap.
Julian Knight
0

Saya memiliki masalah yang sama pada Windows 10. Saya bertanya-tanya bagaimana mungkin memiliki banyak versi CygWin, sementara saya tidak dapat menemukan satu pun cygwin.dll. GitExtensions-> Stash dan Git Bash mengalami crash dengan pesan kesalahan yang berbeda. Solusinya ada di sini: Buka Windows Defender -> Kontrol Aplikasi & browser -> Perlindungan eksploitasi. Dan matikan tiga opsi dengan ASLR. Anda harus me-restart sistem Anda setelahnya, tetapi itu sangat membantu!

Ilya Denisov
sumber
ini adalah bagian dari bagian komentar, tidak menjawab pertanyaan.
Vishrant