Git for Windowsの代替

現在(2015年4月上旬)、Git for Windowsの「公式」バージョンは1.9.5ですが 、バージョン2.3.5は他のすべてのプラットフォームで既に利用可能です。 したがって、Git for Windowsを現在のバージョンに更新すること、またはGit for Windowsを代替ディストリビューションに置き換えることに自然に関心があります。

少し調査した結果、WindowsプラットフォームでGitを使用する次の方法(ディストリビューション)が発見されました。

Git for Windows。


公式のgit-scm Webサイトで提供されるディストリビューションは、MSYSプロジェクトに基づいています。 つまり、実際には、Windows Gitに移植され、さらにGitが機能するために必要なGNUユーティリティのサブセットも移植されています。

欠点としては、Gitの古いバージョンやその他のGNUユーティリティがあります。 数年前から、ユーティリティ( perlssh 、...)を更新する要求がバグトラッカーにかかっています。

必要なユーティリティはありません(rsync、...)。 それらは、常に機能するとは限らないMSYSプロジェクトから借用する必要があります(異なるバージョン、時には互いに互換性がない)。

現時点では、プロジェクトは別のベースに移行しています-MinGW-w64 + MSYS2。 開発者Developer's Previewバージョンをアップロードしましたが、検証時にはsshユーティリティが欠落しており、他のユーティリティの追加に関する問題は残っているようです。 しかし、GNUユーティリティは現在のユーティリティ、特にperlに更新されています。

MinGWビルドプロジェクトからのユーティリティの選択


このアセンブリは、GCCの最新バージョンを見つける過程で、ほぼ偶然に発見されました。 必要なすべてのユーティリティが含まれています。 しかし、残念ながら、長い間更新されていません。

Msys2


git-for-windowsプロジェクトバグトラッカーのメッセージから、独立したMSYS2プロジェクトがあることを学びました。 プロから:

マイナスのうち、おそらくGit for Windowsと比較して、デフォルトでインストールするときのサイズが大きくなります。 ただし、余分なパッケージは削除できます。

EGit / JGit


EclipseのGit実装 (Java)。 コマンドラインから呼び出すことは可能ですが、MSYSシェルが必要であり、これは通常の作業方法よりも概念実証です。

SmartGit / Hg


これは、Java でのGitのネイティブ実装でもあります。 コマンドラインで作業する通常の機能はありません。 そして、素晴らしいツールであり、オープンソースライセンスがあります。

libgit2


非常に有望なプロジェクト。 最初は移植可能になり、実装は純粋なCで行われます。しかし、これまでのところ、このライブラリのみを使用してGit(GUI +コマンドライン)のすべての機能を実装するプロジェクトはありません。

プロジェクト:

posh-gitプロジェクトもここに記載できますが、私が理解しているように、Gitがコマンドラインから既にアクセス可能であることも必要です。

シグウィン


MSYSとは異なり 、アプリケーション用の完全なPOSIXレイヤーを実装(または試行)します。 私は、MSYSアプローチにさらに感銘を受けました。 使用すると、MSYSと比べて重く感じられました。

合計


MSYS2で停止しました。 私は、Gitが(依存関係などを含む)パッケージの形で作られているという事実と、パッケージから簡単にインストールできる新しいGNUユーティリティの存在が好きでした。

次に、操作中に表示されたコメント、考えられる困難および解決策について説明します。

設置


1. 32ビットまたは64ビットの MSYS2をダウンロードします。 はい、現在64ビットGitがあります。これについては以下のメモをご覧ください。

インストールフォルダー(およびパス)の名前にはスペースを含めないでください。また、ASCII文字(ASCII、アクセント記号、スペース、シンボリックリンク、ショートパス)のみを含める必要があります。 将来、このフォルダを%MSYS2_DIR%と呼びます。

インストールが完了したら、MSYS2シェルを起動します(スタート→すべてのプログラム→MSYS2)。

2. MSYS2パッケージをインストールおよび更新します( ここで詳細を説明する、写真を使用しここで説明します )。

pacman -Sy pacman --needed -S bash pacman pacman-mirrors msys2-runtime 

MSYS2シェルを再起動し、32ビットバージョンの%MSYS2_DIR%\ autorebase.batを実行します。 次へ

 pacman -Su 

3.ホームの構成

デフォルトでは、 %MSYS2_DIR%\ home \%USERNAME%にHOMEフォルダーが作成され、 %MSYS2_DIR%\ etc \ post-install \ 05-home-dir.postで説明されているように、 %MSYS2_DIR%\ etc \ skelファイルがそこにコピーされます。 フォルダーHOME =%USERPROFILE%を構成することが可能です。 これを行うには、すべてのファイルを%MSYS2_DIR%\ home \%USERNAME%から%USERPROFILE%に 移動し、ファイル%MSYS2_DIR%\ etc \ nsswitch.confの行「db_home:cygwin desc」「db_home:windows desc」に修正し ます

 perl -pi.orig -e "s/db_home:\s+cygwin\s+desc/db_home: windows desc/" nsswitch.conf 

HOME変数が既に存在する場合、 %MSYS2_DIR%\ etc \ skelのファイルはどこにもコピーされません。 必要に応じて、それらを手動でコピーするか、.bashrcおよびその他のファイルを更新します。

4. Gitをインストールする

 pacman -S git 

カスタマイズ


1. Gitコマンドの自動補完(タブによる)および追加情報をコマンドプロンプトに追加するには、ファイルをコピーします。

 %MSYS2_DIR%\usr\share\git\completion\git-completion.bash -> %HOME%\.git-completion.bash %MSYS2_DIR%\usr\share\git\completion\git-prompt.sh -> %HOME%\.git-prompt.sh 

%HOME%\。Bashrcファイルに行を追加します

 . ~/.git-completion.bash . ~/.git-prompt.sh PS1='\[\033]0;$MSYSTEM:${PWD//[^[:ascii:]]/?}\007\]' # set window title PS1="$PS1"'\n' # new line PS1="$PS1"'\[\033[32m\]' # change color to green PS1="$PS1"'\u@\h ' # user@host<space> PS1="$PS1"'\[\033[33m\]' # change color to yellow PS1="$PS1"'\w' # current working directory if test -z "$WINELOADERNOEXEC" ; then PS1="$PS1"'$(__git_ps1)' # bash function fi PS1="$PS1"'\[\033[0m\]' # change color to normal PS1="$PS1"$'\n' # new line PS1="$PS1"'$ ' # prompt: always $ 

git-prompt設定( PS1変数)は、Git for Windowsの以前のバージョンから取得されます。

PS1 = "$ PS1" $ '\ n'に注意してください。 表現$ '\ n'はバグを修正するために使用されます
改行があると、何らかの理由で$()スタイルのコマンド置換がMSYS2で常に失敗するようです。

2.ドキュメント

マンページはgitパッケージによってインストールされます。 表示するには、man-dbパッケージが必要です。

 pacman -S man-db 

そして、いつものように

 man git-add 

HTMLドキュメントはまだありません

 git help add fatal: '/usr/share/doc/git/html': not a documentation directory. 

したがって、自分でビルドするか、 PortableGitアーカイブから抽出して、 %MSYS2_DIR%/ usr / share / doc / git / htmlにコピーしてみてください

Git 32ビットvs. 64ビット


64ビットGitの操作中に、一部のコマンドでメモリ消費が増加することがわかりました。 たとえば、大規模なリポジトリ(5GiB程度)を変換する場合、git-fast-importは使用可能なすべてのRAMを簡単に使用します(ページングファイルが無効になっている場合、これはアプリケーションに十分なメモリがないためプログラムを閉じるように要求するシステムメッセージとして表示されます)。 同じ(既に変換された)リポジトリの場合、TortoiseGitログはコミットツリーを表示できず、実行中のgitサブプロセスが再びすべてのRAMを消費しました。

32ビットGitの場合、これは観察されず、さまざまなGUIやIDEを含むすべてのチームが完全に機能しました。

今のところ、Git 32bitを使用することにしました。

Source: https://habr.com/ru/post/J255443/


All Articles