web-dev-qa-db-ja.com

アプリケーションによって作成されたプロジェクトのバージョン管理を管理するために、GITをアプリケーションに埋め込む可能性は何ですか?

文字列の構造(コレクション)のようなツリーを作成するC++アプリケーションを開発しています。これらのツリー構造の情報をリモート/ローカル(テキストファイルの場合もあります)に保存し、バージョン管理機能を一緒に持つ機能を追加したいと思います。つまり、アプリケーションによって作成されたツリー構造を保存してバージョン管理したいのです。バージョン管理機能には、プロジェクトバージョンの保持、プロジェクトのマージ、ブランチの作成とマージ、ユーザーによる競合の検出と解決、および主にアプリケーションUIによる管理の機能が必要です。 2つのオプションが表示されます。

  1. 自分でバージョン管理機能をコーディングできました。

  2. あるいは、Git(または他のバージョン管理システム)を自分のアプリケーションに何らかの方法で埋め込むことができます。これにより、裏で行われるほとんどの作業が処理されます。

自分のアプリケーションにバージョン管理システムを実装する方法についての提案や戦略について、インターネットで役立つ情報は見つかりませんでした。

どの戦略を選択すべきかについての洞察に感謝します。多分もっとアプローチがありますか?長所/短所は何ですか?どのアプローチが最も少ない労力で済みますか?

1
Fataho

3つの主なオプションがあります。

  1. サブプロセスを使用してgitアプリケーション自体を実行します。ほとんどの言語には新しいプロセスを開始する方法があり、この方法でgitを実行できます。ただし、gitによって生成された出力の取得は問題になる場合があります。
  2. プログラムにライブラリとしてgitを含めます。 Pythonなど、いくつかの言語ではgitライブラリを利用できます。 libgit2などのCライブラリにリンクすることもできます。これはより多くの作業ですが、うまくいけば、エラーやその他の予期しないイベントの処理が簡単になります。
  3. 既存のvcs GUIをアプリケーションに埋め込みます。これははるかに簡単です。プログラムは、バージョン管理の部分について何も知る必要はありません。ファイルシステムと対話するだけです。 GUIを別のアプリケーションとウィンドウとして実行できます。必要な場合は、たとえばに実装されているGUIを使用できます。 Pythonおよび関連するウィジェットを独自のGUIに含めます。

独自のバージョン管理システムを導入することは、おそらく良い考えではありません。多くの優れたソリューション(GIT、SVN、RCSなど)があり、それぞれに独自の特性があります。本番用のVCSを作成することは、気弱な人には向いていません...

データ構造をASCIIファイル(JSONやYAMLなど)にシリアル化して、gitで管理しやすくすることができます。

既存のGUIを使用する主な利点は、ユーザーがどのようにVCSとやり取りしたいかを見つけ出し、最も一般的なエラーを処理するという大変な作業をすべて行ったことです。

1
EvertW