Udostępnij za pomocą


Importowanie repozytorium Git do projektu

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.

  1. W przeglądarce zaloguj się do organizacji i wybierz Repozytoria>Pliki.

    Zrzut ekranu przedstawiający widok gałęzi.

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

    Zrzut ekranu przedstawiający ekran Zarządzanie repozytoriami.

  3. Wprowadź adres URL klonowania repozytorium źródłowego i nazwę nowego repozytorium Git.

Zrzut ekranu przedstawiający okno dialogowe importowania repozytorium z publicznie dostępnym adresem URL repozytorium przykładowego.

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

Zrzut ekranu przedstawiający 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 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

  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 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 zastępuje wszystkie gałęzie w repozytorium docelowym, co obejmuje usunięcie 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 (FAQ)

Chociaż importowanie jest najczęściej skuteczne, następujące warunki mogą powodować problemy.

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 tsv
    
  • Principał 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

Następne kroki