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ń Project Administracja istrators lub mieć uprawnienie Tworzenie repozytorium na poziomie projektu Git na wartość Zezwalaj. Aby dowiedzieć się więcej, 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ń Project Administracja istrators lub mieć uprawnienie Tworzenie repozytorium na poziomie projektu Git na wartość Zezwalaj. Aby dowiedzieć się więcej, 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

  1. Wybierz pozycję Repozytoria, Pliki.

    Wyświetlanie gałęzi

  2. Z listy rozwijanej repozytorium wybierz pozycję Importuj repozytorium.

    Zarządzanie repozytoriami

  3. 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.

    Okno dialogowe Importowanie repozytorium

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.

Importowanie repozytorium do istniejącego repozytorium

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 Ustawienia, kontroli wersji, wybierania repozytorium i wybierania 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.

  1. 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życiu bare opcji nazwa folderu zawiera .git sufiks. W tym przykładzie https://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
    
  2. 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.

  3. 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.

  4. 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
    
  5. 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?

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

Następne kroki