Package Manager は、Git のリポジトリからパッケージを取得すると、プロジェクトへローカルにパッケージを追加します。これにより、公開されていない変更を簡単にテストすることができますが、Git リポジトリへのコントリビュートには使用できません。既存のローカル Git リポジトリをプロジェクトの依存関係として設定するには、代わりに ローカル Git リポジトリへのパス を使用します。
Note: You cannot specify Git dependencies in a package.json file because the Package Manager does not support Git dependencies between packages. It only supports Git dependencies for projects, so you can only declare Git dependencies in the project’s manifest.json file.
ヒント: Git の依存関係をリポジトリの特定のバージョン (リビジョン) に更新したい場合は、ロックされた Git 依存関係 を参照してください。
このセクションでは、以下のトピックについて説明します。
プロジェクトで Git の依存関係を使用するには、Git クライアント (最低バージョン 2.14.0) がマシンにインストールされており、Git の実行パスが PATH システム環境変数に追加されていることを確認してください。
注意: Package Manager は Git 2.14.0 以上で動作するようにテストされています。2.14.0 より下のバージョンの Git を使用している場合、その結果は保証されません。
リポジトリが Git LFS でファイルを追跡する場合は、Git LFS クライアントもマシンにインストールされていることを確認してください。インストールされていないと、Package Manager は LFS サーバーに保存されたファイルを取得できず、エラーメッセージや警告メッセージなしに LFS ポインターファイルをチェックアウトします。
Package Manager ウィンドウを使用して、Git リポジトリから直接パッケージをインストールすることもできます。詳細は、Git URL からのインストール を参照してください。
The Package Manager supports all Git protocols, with the exception of local file paths. To specify a Git URL as a dependency, add the name of the package to add with a Git URL instead of the version number or local file path to the project manifest. For example, this demonstrates how to specify a remote Git using different protocols:
{
"dependencies": {
"com.mycompany.mypackage1": "https://github.example.com/myuser/myrepository1.git",
"com.mycompany.mypackage2": "ssh://git@github.example.com/myuser/myrepository2.git",
"com.mycompany.mypackage3": "file://localhost/github.example.com/myuser/myrepository3.git",
"com.mycompany.mypackage4": "git://github.example.com/myuser/myrepository4.git",
etc.
}
}
Package Manager は、URL としてフォーマットされた依存関係が Git URL であることを、リポジトリパスの最後にある .git
というファイル拡張子で認識します。Git リポジトリのホスティングサービスの中には、この拡張子を持つ URL をサポートしていないものもあれば、サポートしているものもあります。このため、GIT プロトコル を使用する場合や、HTTP/HTTPS、SSH、FILE に特別な git+
のプレフィックスを加える場合には、Git の依存関係の構文では拡張子を省略することができます。
ノート: git+
プレフィックスは、manifest.json
ファイル内の特別なマーカーで、依存関係が Git ベースであることを示します。Package Manager は、リポジトリのクローンを作成する際に、このプレフィックスを Git に渡しません。
Git がサポートする URL の形式に関する情報は、Git クローン コマンドを参照してください。Git が使う形式の違いに関する概要は プロトコルの使用に関する Git ドキュメント を参照してください。
さらに、Git 依存関係には拡張構文が使われています。
目的のパッケージがリポジトリのルートにない場合、パッケージが置かれているリポジトリのサブフォルダーへのパスを指定することができます。これは、必要なパッケージがリポジトリのルートにない場合にのみ必要です。たとえば、?path=/folder1/folder2
という文字列の場合は以下の通りです。
"https://github.example.com/myuser/myrepository.git?path=/folder1/folder2"
詳しくは、サブフォルダーのパッケージを指定 を参照してください。
You can specify a Git revision, which can be a tag, branch name, or a specific commit hash to lock onto. This ensures that the Package Manager always loads that exact revision. If you don’t specify a revision, the Package Manager clones the repository at the default branch and latest commit and locks onto that revision. For example, the string #v2.0.0
in:
"https://github.example.com/myuser/myrepository.git#v2.0.0"
詳しくは、特定のリビジョンを対象とする を参照してください。
完全な URL で HTTPS プロトコルを使用することができます。
{
"dependencies": {
"com.mycompany.mypackage": "https://github.example.com/myuser/myrepository.git"
}
}
Git サーバーが .git
拡張子をサポートしない場合は、特別な git+
プレフィックスを加えることができます (拡張子をつけてもつけなくても可能です)。
{
"dependencies": {
"com.mycompany.mypackage1": "git+https://github.example.com/myuser/myrepository1.git",
"com.mycompany.mypackage2": "git+https://github.example.com/myuser/myrepository2"
}
}
ノート: 他の方法として、 git+
プレフィックスの代わりに GIT プロトコルを使用することもできます。詳細は、GIT プロトコルの使用 を参照してください。
リポジトリが一般に公開されている場合、GitのURLをユーザーと共有するにはHTTPSが推奨されます。なぜなら、Gitリポジトリのホスティングサービスのウェブページから URL を直接コピーアンドペーストできるからです。
リポジトリが一般に公開されておらず、HTTPS を使用している場合、認証情報を提供するためのサーバーとのやり取りができないため、リポジトリサーバーの認証に失敗します。この場合、エディターは認証に失敗したことを通知します。
これらの認証の問題を回避するには、Git 認証ヘルパー を使って事前に認証するか、代わりに SSH プロトコル を使います。Git リポジトリのホスティングサービスで SSH 鍵ペアを設定すると、Package Manager はシームレスにリクエストを認証できます。
完全な URL で SSH プロトコルを使用できます。
{
"dependencies": {
"com.mycompany.mypackage": "ssh://git@mycompany.github.com/gitproject/com.mycompany.mypackage.git"
}
}
Git サーバーが .git
拡張子をサポートしない場合は、特別な git+
プレフィックスを加えることができます (拡張子をつけてもつけなくても可能です)。
{
"dependencies": {
"com.mycompany.mypackage1": "git+ssh://git@github.example.com/myuser/myrepository1.git",
"com.mycompany.mypackage2": "git+ssh://git@github.example.com/myuser/myrepository2"
}
}
ノート: 他の方法として、 git+
プレフィックスの代わりに GIT プロトコルを使用することもできます。詳細は、GIT プロトコルの使用 を参照してください。
また、Package Manager は常に Git の依存関係として認識する SCP のようなコマンドを使うこともできます。
{
"dependencies": {
"com.mycompany.mypackage": "git@mycompany.github.com:gitproject/com.mycompany.mypackage.git"
}
}
SSH を使用して認証する場合、Git はデフォルトの場所にあるキーを使用します。ただし、 PuTTY を Windows の SSH クライアントとして使用する場合は、GIT_SSH 環境変数を設定して plink.exe
を指すようにする必要があります。
SSH プロトコルを使用する場合は、Unity の外部で SSH 鍵を設定する必要があります。特定のホストに対する認証の設定については、Bitbucket、GitLab、GitHub のページを参照してください。
ノート: SSH キーをパスフレーズで暗号化すると、Package Manager はパッケージを取得できません。なぜなら、ターミナルやコマンドラインでパスフレーズを入力する方法が用意されていないからです。この場合、エディターは認証に失敗したことを通知します。ssh-agent を認証に使用するための情報は、SSH の解決策 を参照してください。
Package Manager は、適切にフォーマットされていない限り file:
プレフィックスを持つ Git URL を Git の依存関係として認識しません。つまり、git+file:
プロトコル、または、file:
プロトコルの .git
サフィックス、いずれかを使う必要があります。
{
"dependencies": {
"com.mycompany.mypackage1": "git+file://github.example.com/myuser/myrepository1",
"com.mycompany.mypackage2": "git+file:///github.example.com/myuser/myrepository2",
"com.mycompany.mypackage3": "file:///github.example.com/myuser/myrepository3.git"
}
}
ノート: 他の方法として、 git+
プレフィックスの代わりに GIT プロトコルを使用することもできます。詳細は、GIT プロトコルの使用 を参照してください。
Package Manager は代わりに、他の構文を ローカルパス として解釈します。
Package Manager は、.git
パスサフィックスの有無にかかわらず git:
プロトコルを認識します。
{
"dependencies": {
"com.mycompany.mypackage1": "git://github.example.com/myuser/myrepository1.git",
"com.mycompany.mypackage2": "git://github.example.com/myuser/myrepository2"
}
}
GIT プロトコルは git+
プレフィックスを必要とせず、サポートもしません。
Package Manager に複製させたい特定のリビジョンを宣言するには、URL の最後に記号 #
と “revision” (リビジョン) を加えます。
{
"dependencies": {
"com.mycompany.mypackage1": "https://github.example.com/myuser/myrepository1.git#revision",
"com.mycompany.mypackage2": "git+https://github.example.com/myuser/myrepository2#revision"
}
}
“revision” には、任意のタグ、ブランチ、コミットハッシュを指定できます。この表は、リビジョンを指定する例です。
構文 | URL 例 |
---|---|
最新のデフォルトブランチ | "https://github.example.com/myuser/myrepository.git" |
特定のブランチ | "https://github.example.com/myuser/myrepository.git#my-branch" |
具体的なバージョン | "https://github.example.com/myuser/myrepository.git#v2.0.0" |
コミットハッシュ | "https://github.example.com/myuser/myrepository.git#9e72f9d5a6a3dadc38d813d8399e1b0e86781a49" |
GitのURL構文を使ってリポジトリを指定した場合、Package Manager は、パッケージがリポジトリのルートになければならないと仮定します。しかし、パッケージの中には、リポジトリのルートレベルにないものもありますし、リポジトリの中には複数のパッケージが含まれているものもあります。
GitのURLで path
クエリパラメータを使用して、Package Manager にパッケージを見つける場所を通知することができます。指定するパスは、リポジトリのルートからの相対パスである必要があり、指定するサブフォルダーには、パッケージマニフェスト(package.json
ファイル) が含まれている必要があります。
Git の依存関係にあるリポジトリのサブフォルダーを指定するには、path
クエリパラメーターを使用します。
{
"dependencies": {
"com.mycompany.mypackage": "https://github.example.com/myuser/myrepository.git?path=/subfolder"
}
}
この場合、Package Manager は、指定されたリポジトリのサブフォルダーにあるパッケージのみを登録し、リポジトリの残りの部分は無視します。
リポジトリには複数の関連パッケージが含まれていることがあります。同じリポジトリから複数のパッケージを加えたい場合は、プロジェクトマニフェストに 2 つの別々のエントリーを追加する必要があります。
{
"dependencies": {
"com.mycompany.mypackage1": "https://github.example.com/myuser/myrepository.git?path=/subfolder1",
"com.mycompany.mypackage3": "https://github.example.com/myuser/myrepository.git?path=/subfolder2/subfolder3"
}
}
ノート: 同じリポジトリを複数回指定すると、Package Manager が同じリポジトリを複数回クローンするため、パフォーマンスの低下やネットワーク使用量の増加につながります。
path
クエリパラメーターは、常にリビジョンアンカー (#) の前にあります。逆の順序では失敗します。以下は、正しい順序で使用する例です。
{
"dependencies": {
"com.mycompany.mypackage": "https://github.example.com/myuser/myrepository.git?path=/example/folder#v1.2.3"
}
}
Package Manager の基本原則のひとつは、決定論です。プロジェクトを他のユーザーと共有する場合、Package Manager は同じ一揃いの依存パッケージとバージョンをインストールしなければなりません。これには Git から取得したパッケージも含まれます。これを実現するために、Package Manager は ロックファイル を使用します。このファイルは、Git の依存関係のどのコミットハッシュが使用されているかを追跡します。
ブランチやタグにリビジョンが設定されている Git 依存関係を加えると、Package Manager は対応するコミットハッシュを取得してロックファイルに保存します。ブランチやタグは、時間の経過とともに Git リポジトリの異なるコミットを指すようになります。たとえば、ブランチに、より新しいコミットが追加されるなどです。
To update the package to a different commit that a branch or tag points to, use the Add package from git URL button and enter a Git URL. You can use the same Git URL, because the Package Manager ignores the locked commit hash when you submit a new request. However, you can also specify a new revision number, tag, or branch as a revision instead.
あるいは、Client.Add C# API メソッドにその Git URL を指定してスクリプトを作成することもできます。
Package Manager は、Git LFS を使ってリポジトリによる Git 依存関係をサポートしています。Git LFS は、最小限の設定オーバーヘッドで動作するように設計され、HTTPS と SSH 認証 の両方をサポートしています。ユーザーが認証を必要とする場合にリモートリポジトリにアクセス権限を持つ有効な認証情報を持っていない場合には、LFS サーバーに保存されているファイルの取得は失敗します。
パッケージの作成者は、Git LFS クライアントが LFS サーバーの場所を見つけられるように、リポジトリ内の .lfsconfig
設定ファイルに URL を指定することができます。これには 2 つの方法があります。
# Option 1: global setting
[lfs]
url = ssh://git@HOSTNAME/path/to/repo.git
# Option 2: per-remote setting
[remote "origin"]
lfsurl = ssh://git@HOSTNAME/path/to/repo.git
リポジトリに .lfsconfig
ファイルが含まれている場合、パッケージの公開リリースに加えることを避けるために、.npmignore
ファイル内に置くようにしてください。
As of Unity 2021.2, you can optionally enable a Git LFS cache for the Package Manager to use when checking out Git-based dependencies. This avoids having to download the same file every time you check out a different revision of the repository.
The Git LFS cache for the Package Manager is different from the Git LFS cache in the .git/lfs folder of your Git repository. The Package Manager can’t use the default Git cache because it doesn’t keep cloned repositories after the packages have been copied to the project cache.
To enable the Git LFS cache for the Package Manager, choose one of the following options:
git-lfs
サブフォルダーを使用するには、UPM_ENABLE_GIT_LFS_CACHE
環境変数に任意の (空ではない) 値を設定します。UPM_GIT_LFS_CACHE_PATH
環境変数にカスタムパスを設定します。この場所を設定すると、Git LFS キャッシュのオプションが自動的に有効になります。For more information about how to set environment variables for the global cache, see Customizing the shared cache locations.
Note: This optimization requires extra disk space when using Git LFS-enabled packages. You need to decide which is the greater benefit: Git LFS file caching costs disk space but saves on re-downloading the same files. However, some situations can’t make use of the cache and use up disk space without re-using the files. For example, your Git dependencies might resolve to revisions that reference different LFS-tracked file content, such as these scenarios: