패키지 관리자가 Git 저장소에서 패키지를 가져오면 패키지를 프로젝트에 로컬로 추가합니다. 이렇게 하면 퍼블리시되지 않은 변경 사항을 테스트할 수 있지만 이를 사용하여 해당 Git 저장소에 영향을 미칠 수는 없습니다. 프로젝트에서 기존 로컬 Git 저장소를 종속성으로 설정하려면 대신 로컬 Git 저장소 경로를 사용하십시오.
참고: 패키지 관리자가 패키지 간 Git 종속성을 지원하지 않으므로 package.json 파일에서 Git 종속성을 지정할 수 없습니다. 프로젝트에 대해서만 Git 종속성을 지원하므로 프로젝트의 manifest.json 파일에서만 Git 종속성을 선언할 수 있습니다.
팁: Git 종속성을 저장소에서 특정 버전(리비전)으로 업데이트하려는 경우 잠긴 Git 종속성을 참조하십시오.
이 섹션에서는 다음의 항목을 다룹니다.
프로젝트에서 Git 종속성을 사용하려면 컴퓨터에 Git 클라이언트(최소 2.14.0 버전)를 설치하고 Git 실행 파일 경로를 PATH 시스템 환경 변수에 추가해야 합니다.
경고: Unity는 Git 2.14.0 이상에서 패키지 관리자를 테스트했습니다. 2.14.0 미만의 Git 버전을 사용하는 경우 Unity는 결과를 보장할 수 없습니다.
저장소가 파일을 Git LFS로 추적하는 경우 컴퓨터에 Git LFS 클라이언트가 설치되어 있어야 합니다. 설치되지 않은 경우 패키지 관리자는 LFS 서버에 저장된 파일을 검색할 수 없으며 오류나 경고 메시지 없이 LFS 포인터 파일을 체크아웃합니다.
패키지 관리자 창을 사용하여 Git 저장소에서 직접 패키지를 설치할 수 있습니다. 자세한 내용은 Git URL에서 설치를 참조하십시오.
패키지 관리자는 로컬 파일 경로를 제외하고 모든 Git 프로토콜을 지원합니다. Git URL을 종속성으로 지정하려면 버전 번호나 로컬 파일 경로 대신 Git URL로 추가할 패키지 이름을 프로젝트 매니페스트에 추가합니다. 예를 들어 다음은 다양한 프로토콜을 사용하여 원격 Git을 지정하는 방법을 보여 줍니다.
{
"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.
}
}
패키지 관리자는 저장소 경로 끝에 있는 .git 파일 확장자를 검색하여 URL 포맷의 종속성이 Git URL임을 인식합니다. 일부 Git 저장소 호스팅 서비스는 이 확장자가 포함된 URL을 지원하지 않지만, 이를 적용하는 서비스도 있습니다. 이러한 이유로 Git 종속성 구문에서는 GIT 프로토콜을 사용하거나, HTTP/HTTPS, SSH 또는 FILE URL에 특수한 git+ 접두사를 추가하는 경우 확장자를 생략할 수 있습니다.
참고: git+ 접두사는 종속성이 Git 기반임을 나타내는 manifest.json 파일의 특수 마커입니다. 패키지 관리자는 저장소를 복제할 때 Git에 이를 전달하지 않습니다.
Git 지원 URL의 포맷에 대한 자세한 내용은 git clone 커맨드에 대한 기술 자료를 참조하십시오. Git이 사용하는 두 프로토콜 간의 차이에 대한 개요는 프로토콜 사용에 관한 Git 기술 자료를 참조하십시오.
또한 Git 종속성에 확장된 구문을 사용할 수도 있습니다.
원하는 패키지가 저장소의 루트에 없는 경우 저장소의 패키지 하위 폴더 경로를 지정할 수 있습니다. 이는 원하는 패키지가 저장소의 루트에 없는 경우에만 필요합니다. 다음의 문자열 ?path=/folder1/folder2를 예로 들 수 있습니다.
"https://github.example.com/myuser/myrepository.git?path=/folder1/folder2".
자세한 내용은 하위 폴더에 패키지 지정을 참조하십시오.
잠금을 위한 태그, 브랜치 이름 또는 특정 커밋 해시일 수 있는 Git 리비전을 지정할 수 있습니다. 그러면 패키지 관리자는 항상 정확한 리비전을 로드합니다. 리비전을 지정하지 않으면 패키지 관리자는 기본 브랜치와 최신 커밋의 저장소를 복제하고 해당 리비전을 잠급니다. 다음의 문자열 #v2.0.0를 예로 들 수 있습니다.
"https://github.example.com/myuser/myrepository.git#v2.0.0"
자세한 내용은 Git 리비전 지정을 참조하십시오.
다음의 전체 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를 사용하는 경우 자격 증명을 제공하기 위해 서버와 상호 작용할 수 없기 때문에 저장소 서버가 사용자 인증에 실패합니다. 이 경우 에디터는 인증에 실패했음을 알려줍니다.
이러한 인증 문제를 해결하려면 다음 중 하나를 수행하십시오.
다음의 전체 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 프로토콜 사용을 참조하십시오.
패키지 관리자가 항상 Git 종속성으로 인식하는 SCP와 유사한 짧은 표기를 사용할 수도 있습니다.
{
"dependencies": {
"com.mycompany.mypackage": "git@mycompany.github.com:gitproject/com.mycompany.mypackage.git"
}
}
SSH를 사용하여 인증할 때 Git은 기본 위치의 키를 사용합니다. 그러나 Windows에서 SSH 클라이언트로 PuTTY를 사용하는 경우 GIT_SSH 환경 변수를 설정하여 plink.exe를 가리키도록 해야 합니다.
SSH 프로토콜을 사용하려면 Unity 외부에서 SSH 키를 설정해야 합니다. 특정 호스트에 대한 인증 설정에 관한 자세한 내용은 Bitbucket, GitLab 및 GitHub에 대한 도움말 페이지를 참조하십시오.
참고: 암호 문구로 SSH 키를 암호화한 경우 패키지 관리자는 터미널이나 커맨드 라인에 암호 문구를 입력할 수 있는 방법을 제공하지 않으므로 패키지를 검색해서 가져올 수 없습니다. 이 경우 에디터는 인증에 실패했음을 알려줍니다. 인증 에이전트 사용에 대한 자세한 내용은 SSH Git URL과 함께 암호 문구로 보호되는 SSH 키 사용을 참조하십시오. 인증을 위해 ssh-agent를 사용하는 방법에 대한 자세한 내용은 SSH 솔루션을 참조하십시오.
패키지 관리자는 올바르게 포맷되지 않는 한 file: 접두사가 있는 Git URL을 Git 종속성으로 인식하지 않습니다. 즉, git+file: 프로토콜을 사용하거나 .git 접미사를 file: 프로토콜과 함께 사용해야 합니다.
{
"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 프로토콜 사용을 참조하십시오.
대신에 패키지 관리자는 다른 모든 구문을 로컬 경로로 해석합니다.
패키지 관리자는 .git 경로 접미사를 포함하거나 포함하지 않는 git: 프로토콜을 인식합니다.
{
"dependencies": {
"com.mycompany.mypackage1": "git://github.example.com/myuser/myrepository1.git",
"com.mycompany.mypackage2": "git://github.example.com/myuser/myrepository2"
}
}
GIT 프로토콜은 git+ 접두사를 필요로 하거나 지원하지 않습니다.
확장 구문을 사용하여 특정 Git 리비전이나 하위 폴더의 패키지 또는 둘 다를 식별할 수 있습니다.
Unity가 지원하는 모든 Git 프로토콜에서 확장 구문을 사용할 수 있습니다.
패키지 관리자가 복제할 특정 리비전을 선언하려면 URL 끝에 숫자 기호(#) 접두사가 붙은 리비전을 추가하십시오.
{
"dependencies": {
"com.mycompany.mypackage1": "https://github.example.com/myuser/myrepository1.git#revision",
"com.mycompany.mypackage2": "git+https://github.example.com/myuser/myrepository2#revision"
}
}
리비전은 태그, 브랜치 또는 커밋 해시일 수 있습니다. 전체 커밋 해시를 제공해야 합니다. Unity는 단축된 SHA–1 해시를 지원하지 않습니다. 다음 표에는 리비전을 지정하는 예시가 나와 있습니다.
| 구문 | 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 구문을 사용하여 저장소를 지정하는 경우 패키지 관리자는 패키지가 저장소의 루트에 있어야 한다고 가정합니다. 하지만 일부 패키지는 저장소의 루트 레벨에 없으며, 일부 저장소에는 두 개 이상의 패키지가 포함되어 있습니다.
Git URL의 path 쿼리 파라미터를 사용하여 패키지를 찾을 위치를 패키지 관리자에게 알릴 수 있습니다. 지정하는 경로는 저장소의 루트와 관련되어야 하며 지정하는 하위 폴더에는 패키지 매니페스트(package.json 파일)가 포함되어야 합니다.
Git 종속성에 대한 저장소 하위 폴더를 지정하려면path 쿼리 파라미터를 사용하십시오.
{
"dependencies": {
"com.mycompany.mypackage": "https://github.example.com/myuser/myrepository.git?path=/subfolder"
}
}
이 경우 패키지 관리자는 지정한 저장소 하위 폴더에 있는 패키지를 등록하고 나머지 저장소는 무시합니다.
때때로 저장소에는 여러 개의 관련 패키지가 들어 있습니다. 동일한 저장소에서 두 개 이상의 패키지를 추가하려면 프로젝트 매니페스트에 두 개의 개별 항목을 추가해야 합니다.
{
"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"
}
}
참고: 동일한 저장소를 여러 번 지정하면 패키지 관리자가 동일한 저장소를 여러 번 복제하므로 성능이 저하되고 네트워크 사용량이 증가합니다.
Unity가 지원하는 Git 프로토콜을 사용하여 경로와 리비전을 지정할 수 있습니다. 그러나 path 쿼리 파라미터는 항상 리비전 앵커 앞에 있습니다. 역순서의 경우 실패합니다. 다음은 올바른 사용 순서의 예시입니다.
{
"dependencies": {
"com.mycompany.mypackage": "https://github.example.com/myuser/myrepository.git?path=/example/folder#v1.2.3"
}
}
패키지 관리자의 핵심 원리 중 하나는 결정론적 분명성입니다. 프로젝트를 다른 사용자와 공유하는 경우 패키지 관리자는 동일한 패키지 종속성 및 버전을 설치해야 하며 여기에는 Git에서 가져온 패키지가 포함됩니다. 이를 위해 패키지 관리자는 잠금 파일을 사용하여 Git 종속성의 커밋 해시를 추적합니다.
브랜치 또는 태그에 리비전이 설정된 Git 종속성을 추가하면 패키지 관리자는 해당 커밋 해시를 가져와서 잠금 파일에 저장합니다. 시간이 지남에 따라 브랜치와 태그는 Git 저장소의 다른 커밋을 가리킬 수 있습니다. 예를 들어 브랜치에 새로운 커밋이 추가될 수 있습니다.
패키지를 브랜치 또는 태그가 가리키는 다른 커밋으로 업데이트하려면 Install package from git URL 버튼을 사용하고 Git URL을 입력합니다. 새 요청을 제출할 때 패키지 관리자는 잠긴 커밋 해시를 무시하므로 동일한 Git URL을 사용할 수 있습니다. 하지만 새 리비전 번호, 태그 또는 브랜치를 대신 리비전으로 지정할 수도 있습니다.
또는 해당 Git URL을 사용하여 Client.Add C# API 메서드로 스크립트를 생성할 수 있습니다.
패키지 관리자는 Git LFS를 사용하는 저장소가 있는 Git 종속성을 지원합니다. Git LFS는 최소한의 설정 오버헤드로 작동하도록 설계되었으므로 HTTPS 및 SSH 인증을 모두 지원합니다.
사용자가 인증이 필요하고 원격 저장소에 액세스할 수 있는 권한이 있는 유효한 자격 증명이 없는 경우 LFS 서버에 저장된 파일 검색이 실패합니다.
패키지 작성자는 저장소의 .lfsconfig 설정 파일에 URL을 제공하여 Git LFS 클라이언트가 LFS 서버를 찾도록 도울 수 있습니다. 두 가지 방법으로 옮길 수 있습니다.
# 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 파일에 포함해야 합니다.
Unity 2021.2부터 패키지 관리자가 Git 기반 종속성을 확인할 때 사용할 Git LFS 캐시를 선택적으로 활성화할 수 있습니다. 이렇게 하면 저장소의 다른 리비전을 체크아웃할 때마다 동일한 파일을 다운로드할 필요가 없습니다.
패키지 관리자의 Git LFS 캐시는 Git 저장소의 .git/lfs 폴더에 있는 Git LFS 캐시와 다릅니다. 패키지 관리자는 프로젝트 캐시에 패키지를 복사한 후 복제된 저장소를 유지하지 않으므로 기본 Git 캐시를 사용할 수 없습니다.
패키지 관리자에 대해 Git LFS 캐시를 활성화하려면 다음 옵션 중 하나를 선택하십시오.
git-lfs 하위 폴더를 해당 위치로 사용하려면 UPM_ENABLE_GIT_LFS_CACHE 환경 변수를 비어 있지 않은 임의의 값으로 설정합니다.UPM_GIT_LFS_CACHE_PATH 환경 변수를 커스텀 경로로 설정합니다. 위치를 설정하면 Git LFS 캐시 옵션이 자동으로 활성화됩니다.전역 캐시에 대한 환경 변수를 설정하는 방법에 대한 자세한 내용은 전역 캐시 커스터마이즈를 참조하십시오.
참고: 이 최적화는 Git LFS 지원 패키지를 사용할 때 추가 디스크 공간을 필요로 합니다. 다음 중 가장 큰 이점이 무엇인지 결정해야 합니다. Git LFS 파일 캐싱은 디스크 공간을 소모하지만 동일한 파일을 다시 다운로드하지 못하게 합니다. 하지만 일부 상황에서는 파일을 재사용하지 않으면서 캐시를 사용하고 디스크 공간을 사용할 수 없습니다. 예를 들어 Git 종속성은 다음 시나리오와 같이 다른 LFS 추적 파일 콘텐츠를 참조하는 리비전으로 해결될 수 있습니다.