Importowanie repozytorium Git
Azure DevOps Services | Azure DevOps Server 2022 — Azure DevOps Server 2019
W tym artykule pokazano, jak zaimportować istniejące repozytorium Git z repozytorium GitHub, Bitbucket, GitLab lub innej lokalizacji do nowego lub pustego istniejącego repozytorium w projekcie usługi Azure DevOps.
Wymagania wstępne
- Organizacja w usłudze Azure DevOps. Jeśli go nie masz, możesz zarejestrować się bezpłatnie. Każda organizacja obejmuje bezpłatne, nieograniczone prywatne repozytoria Git.
- Aby utworzyć lub zaimportować repozytorium, musisz być członkiem grupy zabezpieczeń Administratorzy projektu lub mieć uprawnienie tworzenie repozytorium na poziomie projektu Git na wartość Zezwalaj. Aby uzyskać więcej informacji, zobacz Ustawianie uprawnień repozytorium Git.
- Aby korzystać z funkcji repozytorium importu usługi Azure DevOps, musisz mieć program TFS 2017 Update 1 lub nowszy.
- Aby zaimportować repozytorium przy użyciu programu TFS 2017 RTM lub starszego, zobacz Ręczne importowanie repozytorium przy użyciu interfejsu wiersza polecenia usługi Git.
- Jeśli chcesz użyć poleceń az repos , wykonaj kroki opisane w temacie Rozpoczynanie pracy z interfejsem wiersza polecenia usługi Azure DevOps.
- Organizacja w usłudze Azure DevOps. Jeśli go nie masz, możesz zarejestrować się bezpłatnie. Każda organizacja obejmuje bezpłatne, nieograniczone prywatne repozytoria Git.
- Aby utworzyć lub zaimportować repozytorium, musisz być członkiem grupy zabezpieczeń Administratorzy projektu lub mieć uprawnienie tworzenie repozytorium na poziomie projektu Git na wartość Zezwalaj. Aby uzyskać więcej informacji, zobacz Ustawianie uprawnień repozytorium Git.
- Aby korzystać z funkcji repozytorium importu usługi Azure DevOps, musisz mieć program TFS 2017 Update 1 lub nowszy.
- Aby zaimportować repozytorium przy użyciu programu TFS 2017 RTM lub starszego, zobacz Ręczne importowanie repozytorium przy użyciu interfejsu wiersza polecenia usługi Git.
Uwaga
Po zakończeniu importowania repozytorium usługa Azure DevOps ustawia gałąź Domyślną dla tego zaimportowanego repozytorium. Jeśli zaimportowane repozytorium zawiera gałąź o nazwie master
, jest ustawiona jako gałąź domyślna, w przeciwnym razie pierwsza gałąź (w kolejności alfabetycznej) zaimportowanego repozytorium jest ustawiona na wartość Domyślna.
Importowanie do nowego repozytorium
Wybierz pozycję Repozytoria, Pliki.
Z listy rozwijanej repozytorium wybierz pozycję Importuj repozytorium.
Jeśli repozytorium źródłowe jest publicznie dostępne, po prostu wprowadź adres URL klonowania repozytorium źródłowego i nazwę nowego repozytorium Git.
Jeśli repozytorium źródłowe jest prywatne, ale można uzyskać do tego dostęp przy użyciu uwierzytelniania podstawowego (nazwa użytkownika-hasło, osobisty token dostępu itp.), wybierz pozycję Wymaga autoryzacji i wprowadź poświadczenia. Uwierzytelnianie SSH nie jest obsługiwane, ale można ręcznie zaimportować repozytorium korzystające z uwierzytelniania SSH, wykonując kroki opisane w temacie Ręczne importowanie repozytorium przy użyciu interfejsu wiersza polecenia usługi Git.
Importowanie do istniejącego pustego repozytorium
Na stronie Pliki pustego repozytorium Git wybierz pozycję Importuj i wprowadź adres URL klonowania. Jeśli repozytorium źródłowe wymaga uwierzytelnienia, należy podać poświadczenia.
Uwaga
Funkcja importu wyłącza automatyczne łączenie elementów roboczych wymienionych w komentarzu zatwierdzenia, ponieważ identyfikatory elementów roboczych w projekcie docelowym mogą nie być takie same jak w projekcie źródłowym. Automatyczne łączenie elementów roboczych wymienionych w zatwierdzeniu można włączyć ponownie, przechodząc do pozycji Ustawienia, Kontrola wersji, wybieranie repozytorium i wybieranie opcji. Aby uzyskać więcej informacji na temat łączenia zatwierdzeń z elementami roboczymi, zobacz Łączenie elementów roboczych z zatwierdzeniami
Ręczne importowanie repozytorium przy użyciu interfejsu wiersza polecenia az repos
Możesz użyć polecenia az repos import , aby zaimportować repozytorium do projektu usługi Azure DevOps.
Uwaga
Aby można było zaimportować repozytorium Git, musisz najpierw utworzyć repozytorium w usłudze Azure DevOps. Ponadto utworzone repozytorium musi być puste. Aby utworzyć repozytorium, zobacz Tworzenie repozytorium Git w usłudze Azure Repos.
az repos import create --git-source-url
[--detect {false, true}]
[--git-service-endpoint-id]
[--org]
[--project]
[--repository]
[--requires-authorization]
[--subscription]
[--user-name]
Parametry
Parametr | Opis |
---|---|
git-source-url |
Wymagane. Adres URL źródłowego repozytorium Git do zaimportowania. |
detect |
Opcjonalny. Automatycznie wykrywaj organizację. Zaakceptowane wartości: false , true . |
git-service-endpoint-id |
Opcjonalny. Punkt końcowy usługi dla połączenia z zewnętrznym punktem końcowym. |
org , organization |
Adres URL organizacji usługi Azure DevOps. Domyślną organizację można skonfigurować przy użyciu polecenia az devops configure -d organization=<ORG_URL> . Wymagane , jeśli ustawienie nie jest skonfigurowane jako domyślne lub odebrane za pośrednictwem konfiguracji usługi Git. Przykład: https://dev.azure.com/MyOrganizationName/ . |
project , p |
Nazwa lub identyfikator projektu. Projekt domyślny można skonfigurować przy użyciu polecenia az devops configure -d project=<NAME_OR_ID> . Wymagane , jeśli ustawienie nie jest skonfigurowane jako domyślne lub odebrane za pośrednictwem konfiguracji usługi Git. |
repository |
Nazwa lub identyfikator repozytorium, w ramach którego ma zostać utworzone żądanie importu. |
requires-authorization |
Flaga wskazująca, czy źródłowe repozytorium Git jest prywatne. Jeśli potrzebujesz uwierzytelniania, wygeneruj token uwierzytelniania w repozytorium źródłowym i ustaw zmienną środowiskową AZURE_DEVOPS_EXT_GIT_SOURCE_PASSWORD_OR_PAT na wartość tokenu. Następnie żądanie importu będzie zawierać uwierzytelnianie. |
subscription |
Nazwa lub identyfikator subskrypcji. Subskrypcję domyślną można skonfigurować przy użyciu polecenia az account set -s <NAME_OR_ID> . |
user-name |
Nazwa użytkownika określająca, kiedy repozytorium git jest prywatne. |
Przykład
Następujące polecenie importuje publiczne repozytorium fabrikam-open-source do pustego repozytorium Git fabrikam-open-source dla konfiguracji az devops configure --defaults organization=https://dev.azure.com/fabrikamprime project="Fabrikam Fiber"
domyślnej .
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"
}
Ręczne importowanie repozytorium przy użyciu interfejsu wiersza polecenia git
Funkcja repozytorium importu została wprowadzona w programie TFS 2017 Update 1. Jeśli używasz programu TFS 2017 RTM lub starszego, możesz wykonać następujące kroki, aby ręcznie zaimportować repozytorium do serwera TFS. Możesz również wykonać te kroki, aby ręcznie zaimportować repozytorium do repozytorium usługi Azure DevOps Services, zastępując program TFS usługą Azure Repos w poniższych krokach.
Sklonuj repozytorium źródłowe do folderu tymczasowego na komputerze przy użyciu
bare
opcji , jak pokazano w poniższym przykładzie wiersza polecenia, a następnie przejdź do folderu repozytorium. Podczas klonowania przy użyciubare
opcji nazwa folderu zawiera.git
sufiks. W tym przykładziehttps://github.com/contoso/old-contoso-repo.git
jest repozytorium źródłowe, które ma zostać zaimportowane ręcznie.git clone --bare https://github.com/contoso/old-contoso-repo.git cd old-contoso-repo.git
Utwórz repozytorium docelowe przy użyciu programu TFS 2017 RTM i zanotuj adres URL klonowania. W tym przykładzie
https://dev.azure.com/contoso-ltd/MyFirstProject/_git/new-contoso-repo
jest to adres URL nowego repozytorium docelowego.Uruchom następujące polecenie, aby skopiować repozytorium źródłowe do repozytorium docelowego.
git push --mirror https://dev.azure.com/contoso-ltd/MyFirstProject/_git/new-contoso-repo
Ostrzeżenie
Użycie
--mirror
spowoduje zastąpienie wszystkich gałęzi w repozytorium docelowym, co obejmuje usuwanie żadnych gałęzi, które nie znajdują się w repozytorium źródłowym.Jeśli repozytorium źródłowe zawiera obiekty LFS, pobierz je i skopiuj je z repozytorium źródłowego do repozytorium docelowego.
git lfs fetch origin --all git lfs push --all https://dev.azure.com/contoso-ltd/MyFirstProject/_git/new-contoso-repo
Usuń folder tymczasowy, uruchamiając następujące polecenia.
cd .. rm -rf old-contoso-repo.git
Często zadawane pytania
Mimo że przez większość czasu importowanie zakończyło się pomyślnie, następujące warunki mogą powodować problemy.
- Co zrobić, jeśli moje repozytorium źródłowe znajduje się za uwierzytelnianiem dwuskładnikowym?
- Co zrobić, jeśli moje repozytorium źródłowe nie obsługuje multi_ack?
- Czy mogę zaimportować z poprzednich wersji serwera Team Foundation Server?
- Czy mogę używać poświadczeń opartych na protokole MSA?
- Czy mogę zaimportować z serwera TFVC?
- Co zrobić, jeśli moje repozytorium źródłowe zawiera obiekty Git LFS?
Co zrobić, jeśli moje repozytorium źródłowe znajduje się za uwierzytelnianiem dwuskładnikowym?
Usługa importowania używa interfejsów API REST do weryfikowania i wyzwalania importu i nie może pracować bezpośrednio z repozytoriami, które wymagają uwierzytelniania dwuskładnikowego. Większość dostawców hostingu Git, takich jak GitHub i Azure DevOps Services , obsługuje osobiste tokeny, które można dostarczyć do usługi importowania.
Co zrobić, jeśli moje repozytorium źródłowe nie obsługuje multi_ack?
Usługa importowania używa multi_ack możliwości protokołu Git podczas importowania. Jeśli repozytorium źródłowe nie zapewnia tej możliwości, importowanie usługi importowania z danego źródła może zakończyć się niepowodzeniem. Ten błąd może wystąpić podczas tworzenia żądania importu lub podczas importowania w toku.
Czy mogę zaimportować z poprzednich wersji serwera Team Foundation Server?
Jeśli źródłowe repozytorium Git znajduje się w wersji TFS starszej niż TFS 2017 RTM, importowanie zakończy się niepowodzeniem. Dzieje się tak z powodu niezgodności kontraktu między najnowszymi usługami Azure DevOps Services/TFS i wersjami przed 2017 RTM serwera TFS.
Czy mogę używać poświadczeń opartych na protokole MSA?
Niestety poświadczenia oparte na koncie Microsoft (dawniej Live ID) nie będą działać. Usługa Import opiera się na podstawowym uwierzytelnianiu w celu komunikowania się z repozytorium źródłowym. Jeśli używana nazwa użytkownika/hasło nie są podstawowym uwierzytelnianiem, uwierzytelnianie zakończy się niepowodzeniem i importowanie zakończy się niepowodzeniem. Jednym ze sposobów sprawdzenia, czy używana nazwa użytkownika/hasło są podstawowym uwierzytelnianiem, czy nie jest próba sklonowania repozytorium przy użyciu narzędzia Git przy użyciu poniższego formatu
git clone https://<<username>>:<<password>>@<<remaining clone Url>>
Czy mogę zaimportować z serwera TFVC?
Kod można migrować z istniejącego repozytorium TFVC do nowego repozytorium Git na tym samym koncie. Migracja do usługi Git ma wiele korzyści, ale jest to proces związany z dużymi repozytoriami i zespołami TFVC. Scentralizowane systemy kontroli wersji, takie jak TFVC, zachowują się inaczej niż git w podstawowy sposób. Przełącznik obejmuje o wiele więcej niż uczenie się nowych poleceń. Jest to przełomowa zmiana, która wymaga starannego planowania. Aby uzyskać więcej informacji, zobacz Importowanie z serwera TFVC do usługi Git.
Co zrobić, jeśli moje repozytorium źródłowe zawiera obiekty Git LFS?
Importowanie usługi Git nie spowoduje zaimportowania obiektów Git LFS.
Obiekty LFS można przenosić, wykonując następujące czynności:
- Zaimportuj repozytorium przy użyciu funkcji importowania repozytorium do usługi Azure DevOps. Spowoduje to skopiowanie wszystkich obiektów Git ze źródła do usługi Azure DevOps (spowoduje to również zaimportowanie wskaźników LFS, które są obiektami Git, ale nie plikami LFS)
Aby przejść przez pliki LFS (konieczne będzie zarówno Git.exe, jak i klienta LFS w tym samym polu oraz dostęp do repozytorium źródłowego i repozytorium docelowego)
- Sklonuj zaimportowane repozytorium z usługi Azure DevOps do systemu lokalnego. Klonowanie będzie działać, ale nie powiedzie się podczas wyewidencjonowania plików LFS
- Dodaj repozytorium źródłowe jako zdalne (np. "źródło")
- Wykonaj
git lfs fetch source --all
(spowoduje to przeniesienie wszystkich plików LFS ze źródła do repozytorium lokalnego) - Przy założeniu, że docelowe repozytorium usługi VSTS jest zdalne "docelowe"
- Wykonać
git lfs push target --all
Czy mogę zaimportować aktualizacje, jeśli źródło zmieni się później?
Usługa importu służy do początkowego importowania całego repozytorium. Aby odzwierciedlić późniejsze zmiany, potrzebny będzie lokalny klon repozytorium ze zdalnymi ustawionymi na źródło i miejsce docelowe.
Zmiany można zsynchronizować przy użyciu następujących poleceń.
Zaimportujemy usługę Azure Repos jako origin
i oryginalne repozytorium jako 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