Git 리포지토리 가져오기
Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019
이 문서에서는 GitHub, Bitbucket, GitLab 또는 기타 위치에서 Azure DevOps 프로젝트의 새롭거나 비어 있는 기존 리포지토리로 기존 Git 리포지토리를 가져오는 방법을 보여 줍니다.
필수 조건
- Azure DevOps 조직 없는 경우 무료로 등록할 수 있습니다. 각 조직에는 무료 무제한 프라이빗 Git 리포지토리가 포함됩니다.
- 리포지토리를 만들거나 가져오려면 프로젝트 관리자 보안 그룹의 구성원이거나 Git 프로젝트 수준 만들기 리포지토리 만들기 권한이 허용으로 설정되어 있어야 합니다. 자세한 내용은 Git 리포지토리 권한 설정을 참조 하세요.
- Azure DevOps 가져오기 리포지토리 기능을 사용하려면 TFS 2017 업데이트 1 이상이 있어야 합니다.
- TFS 2017 RTM 이하를 사용하여 리포지토리를 가져오려면 git CLI를 사용하여 리포지토리 수동 가져오기를 참조하세요.
- az repos 명령을 사용하려면 Azure DevOps CLI 시작의 단계를 따라야 합니다.
- Azure DevOps 조직 없는 경우 무료로 등록할 수 있습니다. 각 조직에는 무료 무제한 프라이빗 Git 리포지토리가 포함됩니다.
- 리포지토리를 만들거나 가져오려면 프로젝트 관리자 보안 그룹의 구성원이거나 Git 프로젝트 수준 만들기 리포지토리 만들기 권한이 허용으로 설정되어 있어야 합니다. 자세한 내용은 Git 리포지토리 권한 설정을 참조 하세요.
- Azure DevOps 가져오기 리포지토리 기능을 사용하려면 TFS 2017 업데이트 1 이상이 있어야 합니다.
- TFS 2017 RTM 이하를 사용하여 리포지토리를 가져오려면 git CLI를 사용하여 리포지토리 수동 가져오기를 참조하세요.
참고 항목
리포지토리 가져오기가 완료되면 Azure DevOps는 가져온 리포지토리에 대한 기본 분기를 설정합니다. 가져온 리포지토리에 이름이 지정된 master
분기가 포함되어 있으면 기본 분기 설정되고, 그렇지 않으면 가져온 리포지토리의 첫 번째 분기(사전순)가 기본값으로 설정됩니다.
새 리포지토리로 가져오기
리포지토리, 파일을 선택합니다.
리포지토리 드롭다운에서 리포지토리 가져오기를 선택합니다.
원본 리포지토리를 공개적으로 사용할 수 있는 경우 원본 리포지토리의 복제 URL과 새 Git 리포지토리의 이름을 입력하기만 하면 됩니다.
원본 리포지토리가 비공개이지만 기본 인증(사용자 이름 암호, 개인 액세스 토큰 등)을 사용하여 액세스할 수 있는 경우 권한 부여 필요를 선택하고 자격 증명을 입력합니다. SSH 인증은 지원되지 않지만 Git CLI를 사용하여 리포지토리를 수동으로 가져오는 단계에 따라 SSH 인증을 사용하는 리포지토리를 수동으로 가져올 수 있습니다.
기존 빈 리포지토리로 가져오기
빈 Git 리포지토리의 파일 페이지에서 가져오기를 선택하고 복제 URL을 입력합니다. 원본 리포지토리에 인증이 필요한 경우 자격 증명을 제공해야 합니다.
참고 항목
가져오기 기능은 대상 프로젝트의 작업 항목 ID가 원본 프로젝트의 작업 항목 ID와 다를 수 있으므로 커밋 주석에 언급된 작업 항목에 대한 자동화된 연결을 사용하지 않도록 설정합니다. 설정, 버전 제어, 리포지토리 선택 및 옵션을 선택하여 커밋에 언급된 작업 항목에 대한 자동 연결을 다시 사용하도록 설정할 수 있습니다. 커밋을 작업 항목과 연결하는 방법에 대한 자세한 내용은 커밋에 작업 항목 연결을 참조 하세요.
az repos CLI를 사용하여 리포지토리를 수동 가져오기
az repos import를 사용하여 리포지토리를 Azure DevOps 프로젝트로 가져올 수 있습니다.
참고 항목
Git 리포지토리를 가져오려면 먼저 Azure DevOps에서 리포지토리를 만들어야 합니다. 또한 만드는 리포지토리는 비어 있어야 합니다. 리포지토리를 만들려면 Azure Repos에서 Git 리포지토리 만들기를 참조하세요.
az repos import create --git-source-url
[--detect {false, true}]
[--git-service-endpoint-id]
[--org]
[--project]
[--repository]
[--requires-authorization]
[--subscription]
[--user-name]
매개 변수
매개 변수 | 설명 |
---|---|
git-source-url |
필수입니다. 가져올 원본 git 리포지토리의 URL입니다. |
detect |
선택 사항. 조직을 자동으로 검색합니다. 허용되는 값: false , . true |
git-service-endpoint-id |
선택 사항. 외부 엔드포인트에 연결하기 위한 서비스 엔드포인트입니다. |
org , organization |
Azure DevOps 조직 URL입니다. 를 사용하여 az devops configure -d organization=<ORG_URL> 기본 조직을 구성할 수 있습니다. 기본값으로 구성되지 않았거나 git 구성을 통해 선택되는 경우 필수 입니다. 예: https://dev.azure.com/MyOrganizationName/ . |
project , p |
프로젝트의 이름 또는 ID입니다. 를 사용하여 az devops configure -d project=<NAME_OR_ID> 기본 프로젝트를 구성할 수 있습니다. 기본값으로 구성되지 않았거나 git 구성을 통해 선택되는 경우 필수 입니다. |
repository |
가져오기 요청을 만들 리포지토리의 이름 또는 ID입니다. |
requires-authorization |
원본 git 리포지토리가 프라이빗인지 여부를 나타내는 플래그입니다. 인증이 필요한 경우 원본 리포지토리에서 인증 토큰을 생성하고 환경 변수 AZURE_DEVOPS_EXT_GIT_SOURCE_PASSWORD_OR_PAT 를 토큰 값으로 설정합니다. 그런 다음 가져오기 요청에 인증이 포함됩니다. |
subscription |
구독의 이름 또는 ID입니다. az account set -s <NAME_OR_ID> 를 사용하여 기본 위치를 구성할 수 있습니다. |
user-name |
git 리포지토리가 프라이빗일 때 지정할 사용자 이름입니다. |
예제
다음 명령은 기본 구성az devops configure --defaults organization=https://dev.azure.com/fabrikamprime project="Fabrikam Fiber"
을 위해 공용 리포지토리 fabrikam-open-source를 빈 Git 리포지토리 fabrikam-open-source로 가져옵니다.
az repos import create --git-source-url https://github.com/fabrikamprime/fabrikam-open-source --repository fabrikam-open-source
{
"detailedStatus": {
"allSteps": [
"Processing request",
"Analyzing repository objects",
"Storing objects",
"Storing index file",
"Updating references",
"Import completed successfully"
],
"currentStep": 6,
"errorMessage": null
},
"importRequestId": 8,
"parameters": {
"deleteServiceEndpointAfterImportIsDone": null,
"gitSource": {
"overwrite": false,
"url": "https://github.com/fabrikamprime/fabrikam-open-source"
},
"serviceEndpointId": null,
"tfvcSource": null
},
"repository": {
"defaultBranch": null,
"id": "0f6919cd-a4db-4f34-a73f-2354114a66c4",
"isDisabled": false,
"isFork": null,
"name": "new-empty-repo",
"parentRepository": null,
"project": {
"abbreviation": null,
"defaultTeamImageUrl": null,
"description": "Guidance and source control to foster a vibrant ecosystem for Fabrikam Fiber applications and extensions.",
"id": "56af920d-393b-4236-9a07-24439ccaa85c",
"lastUpdateTime": "2021-05-24T21:52:14.95Z",
"name": "Fabrikam Fiber",
"revision": 438023732,
"state": "wellFormed",
"url": "https://dev.azure.com/fabrikamprime/_apis/projects/56af920d-393b-4236-9a07-24439ccaa85c",
"visibility": "private"
},
"remoteUrl": "https://fabrikamprime@dev.azure.com/fabrikamprime/Fabrikam%20Fiber/_git/fabrikam-open-source",
"size": 12477,
"sshUrl": "git@ssh.dev.azure.com:v3/kelliott/Fabrikam%20Fiber/new-empty-repo",
"url": "https://dev.azure.com/fabrikamprime/56af920d-393b-4236-9a07-24439ccaa85c/_apis/git/repositories/0f6919cd-a4db-4f34-a73f-2354114a66c4",
"validRemoteUrls": null,
"webUrl": "https://dev.azure.com/fabrikamprime/Fabrikam%20Fiber/_git/fabrikam-open-source"
},
"status": "completed",
"url": "https://dev.azure.com/fabrikamprime/Fabrikam%20Fiber/_apis/git/repositories/0f6919cd-a4db-4f34-a73f-2354114a66c4/importRequests/8"
}
git CLI를 사용하여 리포지토리를 수동 가져오기
가져오기 리포지토리 기능은 TFS 2017 업데이트 1에서 도입되었습니다. TFS 2017 RTM 이하를 사용하는 경우 다음 단계를 사용하여 리포지토리를 TFS로 수동으로 가져올 수 있습니다. 다음 단계에서 TFS를 Azure Repos로 대체하여 리포지토리를 Azure DevOps Services 리포지토리로 수동으로 가져오려면 다음 단계를 수행할 수도 있습니다.
다음 명령줄 예제와 같이 옵션을 사용하여
bare
컴퓨터의 임시 폴더에 원본 리포지토리를 복제한 다음 리포지토리의 폴더로 이동합니다. 옵션을 사용하여bare
복제할 때 폴더 이름에는 접미사가.git
포함됩니다. 이 예제에서는https://github.com/contoso/old-contoso-repo.git
수동으로 가져올 원본 리포지토리입니다.git clone --bare https://github.com/contoso/old-contoso-repo.git cd old-contoso-repo.git
TFS 2017 RTM을 사용하여 대상 리포지토리 를 만들고 복제 URL을 기록해 둡니다. 이 예제에서는
https://dev.azure.com/contoso-ltd/MyFirstProject/_git/new-contoso-repo
새 대상 리포지토리의 URL입니다.다음 명령을 실행하여 원본 리포지토리를 대상 리포지토리에 복사합니다.
git push --mirror https://dev.azure.com/contoso-ltd/MyFirstProject/_git/new-contoso-repo
Warning
사용하면
--mirror
원본 리포지토리에 없는 분기를 삭제하는 것을 포함하는 대상 리포지토리의 모든 분기를 덮어씁 수 있습니다.원본 리포지토리에 LFS 개체가 있는 경우 해당 개체를 가져와서 원본 리포지토리에서 대상 리포지토리로 복사합니다.
git lfs fetch origin --all git lfs push --all https://dev.azure.com/contoso-ltd/MyFirstProject/_git/new-contoso-repo
다음 명령을 실행하여 임시 폴더를 삭제합니다.
cd .. rm -rf old-contoso-repo.git
자주 묻는 질문
가져오기가 성공하는 대부분의 경우 다음 조건으로 인해 문제가 발생할 수 있습니다.
- 내 원본 리포지토리가 2단계 인증 뒤에 있는 경우 어떻게 해야 할까요?
- 원본 리포지토리가 multi_ack 지원하지 않는 경우 어떻게 해야 할까요?
- 이전 버전의 Team Foundation Server에서 가져올 수 있나요?
- MSA 기반 자격 증명을 사용할 수 있나요?
- TFVC에서 가져올 수 있나요?
- 원본 리포지토리에 Git LFS 개체가 포함되어 있으면 어떻게 해야 할까요?
원본 리포지토리가 2단계 인증 뒤에 있는 경우 어떻게 해야 할까요?
가져오기 서비스는 REST API를 사용하여 가져오기의 유효성을 검사하고 트리거하며 2단계 인증이 필요한 리포지토리에서 직접 작업할 수 없습니다. GitHub 및 Azure DevOps Services와 같은 대부분의 Git 호스팅 공급자는 가져오기 서비스에 제공할 수 있는 개인 토큰을 지원합니다.
원본 리포지토리가 multi_ack 지원하지 않는 경우 어떻게 해야 할까요?
가져오기 서비스는 가져오는 동안 Git 프로토콜의 multi_ack 기능을 사용합니다. 원본 리포지토리에서 이 기능을 제공하지 않으면 가져오기 서비스가 지정된 원본에서 가져오지 못할 수 있습니다. 이 오류는 가져오기 요청을 만들거나 가져오기가 진행 중인 동안 발생할 수 있습니다.
이전 버전의 Team Foundation Server에서 가져올 수 있나요?
원본 Git 리포지토리가 TFS 2017 RTM 이전의 TFS 버전에 있는 경우 가져오기가 실패합니다. 이는 최신 Azure DevOps Services/TFS와 2017년 이전 RTM 버전의 TFS 간에 계약이 일치하지 않기 때문에 발생합니다.
MSA 기반 자격 증명을 사용할 수 있나요?
안타깝게도 MSA(Microsoft 계정, 이전의 라이브 ID) 기반 자격 증명은 작동하지 않습니다. 가져오기 서비스는 원본 리포지토리와 통신하기 위해 기본 인증을 사용합니다. 사용 중인 사용자 이름/암호가 기본 인증이 아닌 경우 인증이 실패하고 가져오기가 실패합니다. 사용하는 사용자 이름/암호가 기본 인증인지 여부를 확인하는 한 가지 방법은 아래 형식을 사용하여 Git을 사용하여 리포지토리를 복제하는 것입니다.
git clone https://<<username>>:<<password>>@<<remaining clone Url>>
TFVC에서 가져올 수 있나요?
기존 TFVC 리포지토리에서 동일한 계정 내의 새 Git 리포지토리로 코드를 마이그레이션할 수 있습니다. Git으로 마이그레이션하면 많은 이점이 있지만 대규모 TFVC 리포지토리 및 팀에 관련된 프로세스입니다. TFVC와 같은 중앙 집중식 버전 제어 시스템은 기본적인 방법으로 Git과 다르게 작동합니다. 스위치에는 새 명령을 배우는 것 이상의 작업이 포함됩니다. 신중한 계획이 필요한 파괴적인 변화입니다. 자세한 내용은 TFVC에서 Git으로 가져오기를 참조 하세요.
원본 리포지토리에 Git LFS 개체가 포함되어 있으면 어떻게 해야 할까요?
Git 가져오기는 Git LFS 개체를 가져오지 않습니다.
LFS 개체는 다음 단계를 사용하여 이동할 수 있습니다.
- 리포지토리 가져오기 기능을 사용하여 리포지토리를 Azure DevOps로 가져옵니다. 원본에서 Azure DevOps로 모든 Git 개체를 복사합니다(Git 개체이지만 LFS 파일은 아닌 LFS 포인터도 가져옵니다.)
LFS 파일을 이동하려면(동일한 상자에 Git.exe 및 LFS 클라이언트가 모두 필요하고 원본 리포지토리와 대상 리포지토리 모두에 액세스해야 합니다.)
- 가져온 리포지토리를 Azure DevOps에서 로컬 시스템으로 복제합니다. 복제가 작동하지만 LFS 파일 체크 아웃을 수행하는 동안 실패합니다.
- 원본 리포지토리를 원격으로 추가합니다('원본'이라고 말).
- 수행
git lfs fetch source --all
(원본에서 로컬 리포지토리로 모든 LFS 파일을 가져옵니다.) - 대상 VSTS 리포지토리가 '대상' 원격이라고 가정
- 연주하다
git lfs push target --all
나중에 원본이 변경되는 경우 업데이트를 가져올 수 있나요?
가져오기 서비스는 처음에 전체 리포지토리를 가져오기 위한 것입니다. 나중에 변경 내용을 미러링하려면 원격이 원본 및 대상으로 설정된 리포지토리의 로컬 복제본이 필요합니다.
다음 명령을 사용하여 변경 내용을 동기화할 수 있습니다.
Azure Repos 가져오기를 로 origin
처리하고 원래 리포지토리를 .로 처리 upstream
합니다.
git clone --bare <Azure-Repos-clone-URL>.git
cd <name-of-repo>
git remote add --mirror=fetch upstream <original-repo-URL>
git fetch upstream --tags
git push origin --all