web-dev-qa-db-ja.com

GitHubでのGitプロジェクトの依存関係

私はPHPフレームワークとフレームワークの上にCMSを記述しました。CMSはフレームワークに依存していますが、フレームワークはCMSファイル内の自己完結型フォルダーとして存在します。私はd GitHubでそれらを個別のプロジェクトとして維持したいが、フレームワークを更新するたびにCMSプロジェクトを更新する必要がないので、CMSにフレームワークファイルをプルしてインクルードするのが理想的です。これらのファイルを物理的にコミットするのではなく、事前定義されたサブディレクトリに。

これはGit/GitHubで可能ですか?もしそうなら、それを機能させるために何を知る必要がありますか?私はGitの非常に非常に基本的なレベルの経験を持っていることを覚えておいてください-Eclipse用のGitプラグインを使用してリポジトリを作成してコミットし、GitHubに接続することができます。現在はプロジェクトで一人で作業しているので、これまでにGitについてもっと学ぶ必要はありませんでしたが、将来は他の人にもそれを公開したいと思っています。それが正しいことを確認したいと思います。

また、依存関係のあるプロジェクトの場合、理想的なワークフローはどうなりますか?そのテーマに関するヒントも大歓迎です。私のセットアップに関する詳細情報が必要な場合は、コメントで質問してください。

14
VirtuosiMedia

まず、これに本当にgitを使用したい場合は、その サブモジュール機能 の使用を検討してください。

Gitのサブモジュールのサポートにより、リポジトリーにサブプロジェクトとして外部プロジェクトのチェックアウトを含めることができます。サブモジュールは独自のIDを維持します。サブモジュールのサポートは、サブモジュールのリポジトリの場所とコミットIDを格納するだけなので、含まれているプロジェクト(「スーパープロジェクト」)を複製する他の開発者は、同じリビジョンのすべてのサブモジュールを簡単に複製できます。スーパープロジェクトの部分的なチェックアウトが可能です。Gitにサブモジュールの一部、またはすべてを複製しないように指示できます。

リンク先のページには、正確な使用方法の例を含む詳細な説明が含まれています。

とはいえ、依存関係の管理にはバージョン管理システムを使用せず、 MavenAnt など、これらを処理できるビルドツールの使用を開始することをお勧めします。 Phing と呼ばれる開発中のPHP固有のビルドツールもありますが、私はまだそれを使用していません。それはあなたの質問を議論する記事で言及されています: バージョン管理!=依存関係管理

ビルドツールが長期的に適している理由は、多くの場合、さまざまなリポジトリタイプ、外部ライブラリ(およびさまざまな場所)、および広範なチェックもサポートしているためです。ただし、これら2つのライブラリを統合したいだけで、追加の手間をかけたくない場合は、サブモジュールのアプローチで十分です。

11
Deckard

Gitサブモジュール は、gitプロジェクトの依存関係を管理する優れた方法です。

別のアプローチを探している場合:

Composer がこれをすべて実行できます。 Composer は、phpの依存関係マネージャーです。構文はjsonです。使い方は簡単で安価です。

composerの詳細:

Composerは、PHPでの依存関係管理のためのツールです。これにより、プロジェクトに必要な依存ライブラリを宣言でき、プロジェクトにインストールされます。

ドキュメントページ には、composer.jsonファイルの作成方法の例があります。

// Composer.json    
{

    "name": "acme/blog",
    "repositories": [
        {
            "type": "vcs",
            "url": "https://github.com/composer/hello-world"
        }
    ],
    "require": {
        "acme/hello-world": "dev-master"
    }
}

プロジェクト用にcomposer.jsonおよびcomposer.lockファイルを作成したら、依存関係を簡単にインストールできます。

composer.phar installまたは更新:composer.phar updateまたは packagist から特定のプロジェクトを作成します:composer.phar create-project acmeproject

6
chrisjlee

最近、プロジェクトの依存関係を管理するために Pundle というツールを使い始めました。 PHPバージョン、PEARパッケージ、Gitリポジトリ、SVNリポジトリを依存関係としてサポートし、「Pundlefile」を介してそれらを簡単に指定することができます。

また、Git/SVNチェックアウトがバージョン管理下にあるnotであるディレクトリ(たとえば、「ベンダー」)に配置されるように依存関係を構成する必要があります。すべてのチェックアウトで新たなスタートを切り、プロジェクトのリポジトリを無駄のない状態に保ちます。

1
chh