Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Azure DevOps Services | Azure DevOps Server | Azure DevOps Server 2022 | Azure DevOps Server 2020
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
| Kategoria | Wymagania |
|---|---|
| Dostęp do projektu | Członek projektu . |
| uprawnienia | — Wyświetlanie kodu w projektach prywatnych: co najmniej dostęp do w warstwie Podstawowa. — Klonowanie lub współtworzenie kodu w prywatnych projektach: członkostwo w grupie zabezpieczeń Współautorzy lub odpowiednie uprawnienia w projekcie. — Ustaw uprawnienia gałęzi lub repozytorium: Zarządzanie uprawnieniami dla gałęzi lub repozytorium. - Zmień gałąź domyślną: Edytuj zasady uprawnienia dla repozytorium. — Zaimportuj repozytorium: członek grupy zabezpieczeń Administratorzy projektów lub uprawnienia na poziomie projektu Git Utwórz repozytorium ustawione na Dozwolone. Aby uzyskać więcej informacji, zobacz Ustawianie uprawnień repozytorium Git. |
| Usługi | Repozytoria włączone. |
| Narzędzia | Opcjonalny. Użyj poleceń az repos: interfejsu wiersza polecenia usługi Azure DevOps. |
Uwaga
W projektach publicznych użytkownicy z dostępem Stakeholder mają pełny dostęp do usługi Azure Repos, w tym wyświetlanie, klonowanie i współtworzenie kodu.
| Kategoria | Wymagania |
|---|---|
| Dostęp do projektu | Członek projektu . |
| uprawnienia | — Wyświetl kod: przynajmniej Podstawowy dostęp. — Powielanie lub współtworzenie kodu: członek grupy bezpieczeństwa Contributors lub posiada odpowiednie uprawnienia w projekcie. |
| Usługi | Repozytoria włączone. |
Importowanie do nowego repozytorium
Wykonaj następujące kroki, aby zaimportować je do nowego repozytorium:
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 main, zostanie ustawiona jako gałąź domyślna, w przeciwnym razie pierwsza gałąź (w kolejności alfabetycznej) zaimportowanego repozytorium zostanie ustawiona jako Domyślna.
W przeglądarce zaloguj się do organizacji i wybierz Repozytoria>Pliki.
Z listy rozwijanej repozytorium wybierz pozycję Importuj repozytorium.
Wprowadź adres URL klonowania repozytorium źródłowego i nazwę nowego repozytorium Git.
- Wybierz pozycję Importuj repozytorium.
Repozytorium zostanie zaimportowane.
Importowanie do istniejącego pustego repozytorium
Na stronie Pliki pustego repozytorium Git wybierz pozycję Importuj i wprowadź adres URL klonowania. Podaj poświadczenia, jeśli repozytorium źródłowe wymaga uwierzytelniania.
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.
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. W przypadku zwiększonych zabezpieczeń zalecamy używanie tokenów identyfikatorów Entra firmy Microsoft, jeśli jest to możliwe. Następnie żądanie importu obejmuje 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
Sklonuj repozytorium źródłowe do folderu tymczasowego na komputerze przy użyciu
bareopcji , jak pokazano w poniższym przykładzie wiersza polecenia, a następnie przejdź do folderu repozytorium. Podczas klonowania przy użyciubareopcji nazwa folderu zawiera.gitsufiks. W tym przykładziehttps://github.com/contoso/old-contoso-repo.gitjest 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.gitUtwórz repozytorium docelowe i zanotuj adres URL klonowania. W tym przykładzie
https://dev.azure.com/contoso-ltd/MyFirstProject/_git/new-contoso-repojest 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-repoOstrzeżenie
Użycie
--mirrorzastępuje wszystkie gałęzie w repozytorium docelowym, co obejmuje usunięcie 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-repoUsuń folder tymczasowy, uruchamiając następujące polecenia.
cd .. rm -rf old-contoso-repo.git
Często zadawane pytania (FAQ)
Chociaż importowanie jest najczęściej skuteczne, 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 lokalnych?
- 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 jest chronione uwierzytelnianiem dwuskładnikowym?
Usługa importowania używa interfejsów API REST do walidacji i uruchamiania procesu importu i nie może pracować bezpośrednio z repozytoriami, które wymagają uwierzytelniania dwuskładnikowego.
Większość dostawców hostingu Git obsługuje tokeny uwierzytelniania, które można dostarczyć do usługi importowania:
Tokeny identyfikatora Entra firmy Microsoft (zalecane): Tokeny identyfikatora Entra firmy Microsoft zapewniają lepsze zabezpieczenia i są zalecaną metodą uwierzytelniania. Te tokeny można uzyskać za pomocą następujących funkcji:
Interfejs wiersza polecenia platformy Azure (na potrzeby programowania/testowania):
az account get-access-token --resource 499b84ac-1321-427f-aa17-267ca6975798 --query "accessToken" --output tsvPrincipał usługi (do scenariuszy produkcyjnych i zautomatyzowanych):
- Rejestrowanie aplikacji w Microsoft Entra ID
- Stworzyć tajny klucz klienta dla aplikacji
- Udzielanie aplikacji odpowiednich uprawnień w usłudze Azure DevOps
- Użyj poświadczeń podmiotu usługi do programowego uzyskiwania tokenów.
Osobiste tokeny dostępu (alternatywa):usługi GitHub i Azure DevOps obsługują również osobiste tokeny dostępu.
.: Co zrobić, jeśli moje repozytorium źródłowe nie obsługuje multi_ack?
1: 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, usługa importowania może nie zdołać zaimportować danych z danego źródła. Ten błąd może wystąpić podczas tworzenia żądania importu lub podczas importowania w toku.
.: Czy mogę zaimportować z poprzednich wersji?
1: Jeśli źródłowe repozytorium Git znajduje się w lokalnej wersji starszej niż 2017 RTM, importowanie zakończy się niepowodzeniem z powodu niezgodności kontraktu między najnowszą wersją usługi Azure DevOps a poprzednimi wersjami.
Czy mogę używać poświadczeń opartych na MSA?
Niestety, poświadczenia oparte na koncie Microsoft nie działają. Usługa Import opiera się na podstawowym uwierzytelnianiu w celu komunikowania się z repozytorium źródłowym. Jeśli używana nazwa użytkownika i hasło nie są podstawowym uwierzytelnianiem, uwierzytelnianie i importowanie zakończy się niepowodzeniem. Jednym ze sposobów sprawdzenia, czy używana nazwa użytkownika/hasło są podstawowym uwierzytelnianiem, jest próba sklonowania repozytorium przy użyciu narzędzia Git przy użyciu następującego formatu:
git clone https://<<username>>:<<password>>@<<remaining clone Url>>
.: Czy mogę zaimportować z serwera TFVC?
1: 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 destrukcyjna 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 Git nie importuje 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. Ta akcja kopiuje wszystkie obiekty Git ze źródła do usługi Azure DevOps, która importuje również wskaźniki LFS, które są obiektami Git, ale nie plikami LFS
Aby przenieść pliki LFS, potrzebujesz zarówno Git.exe, jak i klienta LFS w tym samym środowisku oraz dostępu do repozytorium źródłowego i docelowego.
- Sklonuj zaimportowane repozytorium z usługi Azure DevOps do systemu lokalnego. Klonowanie działa, ale kończy się niepowodzeniem podczas wyewidencjonowania plików LFS
- Dodaj repozytorium źródłowe jako zdalne, na przykład "źródło"
- Wykonaj polecenie
git lfs fetch source --all, co powoduje przeniesienie wszystkich plików LFS ze źródła do repozytorium lokalnego - Zakładając, że docelowe repozytorium VSTS to twoje „docelowe” zdalne repozytorium.
- Wykonać
git lfs push target --all
.: Czy mogę zaimportować aktualizacje, jeśli źródło zmieni się później?
1: Usługa importu służy do początkowego importowania całego repozytorium. Aby odzwierciedlić późniejsze zmiany, potrzebny jest lokalny klon repozytorium ze zdalnymi wskazującymi na repozytoria źródłowe i docelowe.
Zmiany można zsynchronizować przy użyciu następujących poleceń.
Traktujemy import 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