4 に答える
GitSharp (少なくとも、そのコア) は、JGit を 1 行ずつ手動で移植したものでした。現在、その開発は 2010 年 8 月以降一時停止されています。ただし、一部の製品はまだ依存しています (例: Git-dot-aspx )。
NGit は JGit の自動化されたポートです。JGit に対して更新され続け、JGit の改善とバグ修正の恩恵を継続的に受けています。NGit は現在、Git 機能を MonoDevelop に導入するために使用されています。
パフォーマンスに関して言えば、GitSharp を使用して巨大なリポジトリ (たとえば、Mono または Linux) を複製することは、長くてつらい経験でした。ただし、NGitは試していません。
これらの事実を考慮して、サポート/メンテナンスの観点から、GitSharp よりも NGit を使用することをお勧めします。
編集:
GitSharp の Web サイトには現在次のように記載されています
libgit2 プロジェクトとその C# バインディングで ある libgit2sharpのほうがはるかに有望であると考えているため、GitSharp の開発は現在保留になっています。
私は GitSharp を少し使用しましたが、1 年前でも十分でした。GitSharp での活動は減ったと思いますが、はるかに優れた実装だと思います。NGit が、その依存関係の一部を含め、大部分が JGit からの自動化されたポートであることは好きではありません (GitSharp は SharpSSH を使用しますが、NGit は JSch のポートである NSch を使用します)。これは、最適ではないパフォーマンスやその他の問題が発生する可能性があることを意味しますが、私は NGit を使用していないため、主張を裏付けることはできません。
GitSharpはより高レベルであり、低レベルの部分はGitSharp.Coreで実装されています。GitSharpは.NETスタイルですが、NGitはJavaっぽすぎます。現在、Commit、TagなどのコマンドはGitSharpに実装されていませんが、これらはNGitに実装されています。
個人的には、純粋な.NET実装を提供するGitSharpが好きです。NGitは、より大きなライブラリセット(JSch、Sharpen)で半自動的に移植されますが、それでも純粋な.NETです。純粋な.NETdll(AnyCPU)は展開を容易にします!!! libgit2sharpはCライブラリの単なるラッパーであり、Cライブラリもデプロイする必要があります。Cライブラリの展開は、多くのプラットフォームとアーキテクチャ(x86、x64、Windows、Linux)をターゲットにするのがより面倒です。
GitSharp プロジェクトは上流の jgit と同期していないため、定期的に最新の jgit と同期する NGit に切り替える必要があります。GitSharp プロジェクトを生かすには多大な労力が必要です。
下位レベルの NGit.dll は、GitSharp.Core.dll を置き換えることができます。上位レベルの GitSharp.dll は、代わりにインターフェイス NGit.dll に移植できます。