私は長い間 cygwin と emacs を使用してきましたが、統合には常に問題がありました。cygwin での xemacs は完全に機能しましたが、xwindows を実行する必要があり、不快でした。次に、git bash をミックスに追加しました。
数えると、Windows の下に 4 つの個別の UNIX 実装があります。
cygwin
Qt (which runs mingw somewhere in there)
git bash
MSYS64
Windowsでネイティブに実行されているemacsを使用します。
これらのツールの一部を統合して削除できるかどうかを知りたいです。cygwin と MSYS2 に git があるのはばかげているようです。では、なぜ別の git bash を用意するのでしょうか? 私が読んだところによると、とにかく git は MSYS2 で実行されています。
しかし、私は非常に疑わしいです。以前は、cygwin は mingw と同じではありませんでした。私が見つけた 2 つの大きなバグがありました。1 つは、mingw でネイティブ ライブラリを使用していたランタイム ライブラリです。そのため、コンパイラが同じであっても、long double を使用してプログラムをコンパイルすると、機能しないプログラムが生成されました。
今試してみましたが、MSYS2 で動作します。これは、すべての gnu ライブラリを使用しているか、Microsoft が更新したためである可能性があります。
スレッディングもmingwでは機能しませんでしたが、cygwinでは機能しました。MSYS2-64 で次の C++ コードをテストしました。
#include <thread>
#include <iostream>
#include <unistd.h>
using namespace std;
void f() {
for (;;) {
cout << "yo!\n";
// sleep(1);
}
}
void g() {
for (;;) {
cout << "ho!\n";
// sleep(2);
}
}
int main() {
thread t1(f);
thread t2(g);
t1.join();
t2.join();
cout << "Done!\n";
return 0;
}
MSYS2 にインストールされているように、emacs で実行すると、ジョブは停止しません (シェルを強制終了する必要があります)。コマンドラインで動作します。スリープ呼び出しのコメントを外すと、MSYS2 bash と emacs コマンド シェルの両方でハングします。
それからgitに問題があります。
git bash は、.ssh を格納するディレクトリとして /c/Users/myuser を使用しています。できます
cygwin で $HOME を echo すると、/c/Users/myuser が表示されますが、存在しない /home/myuser を使用しようとします。つまり、.ssh ディレクトリが存在しないため、失敗します。したがって、cygwin でビルドできますが、面倒な git bash をプッシュする必要があります。完全な開発環境がないため、git bash でビルドできません。
MSYS2 は HOME が /c/Users/myuser であると主張しますが、git push を試みると同じエラーが表示されます。
ディレクトリ '/home/myuser/.ssh' を作成できませんでした。そのため、内部のどこかに、.ssh が c:/Users/myuser ではなく /home/myuser にあるという概念がハードコーディングされています。
さらに悪いことに、cygwin には /home ディレクトリがあり、現在は存在しませんが、デフォルトで作成された /home/myuser を思い出すようです。MSYS2 には NO DIRECTORY /home がありません。作成する必要があるのでしょうか。
Windows で動作する場合、c:/Users/myuser にシンボリックにリンクされたものを作成できますか? 私はちょうどこれを試しました:
mkdir /home/
ln -s /c/Users/myuser /home/myuser
シェルがハングしました。それは良いことではありません!シェルを殺して、再び走りました。どういうわけかそこにディレクトリがありました /home/myuser (ただし、私のシンボリックリンクではありません)。それがどのように生成されたのか、私にはわかりません。しかし、内部にシンボリックリンク .ssh を作成したところ、動作するようになりました。でも、何が起こっているのか分からないので、緊張します。
MSYS64 には、cygwin よりも大きな利点があります。パッケージマネージャーがあり、インストールがはるかに高速で、cygwin よりもはるかに小さいです。コンパイラは新しいです。
emacs と MSYS64 にはまだいくつかの問題がありますが、これについては別の質問で尋ねます。C++ とデータ構造のクラスにこれをインストールするよう学生に依頼できるかどうかを調べているので、スレッド化とコンパイルが確実に機能するようにしたいと考えています。これまでに解決できなかったエラーには、次のものがあります。
スレッド化の回避策はありますか
/home/user に何が起こっているのですか? 私はそれを機能させましたが、後で噛む可能性があることを理解する必要があります.
他の互換性の問題が潜んでいますか?
スレッドの問題はまだ残っているようです。
要約すると、MSYS2 で git を使用する方法はありますか? 安全に git と cygwin を取り除くことはできますか? それとも、cygwin を維持する理由はありますか? git bash を個別に保持する必要がありますか?