Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Layanan Azure DevOps | Azure DevOps Server | Azure DevOps Server 2022 | Azure DevOps Server 2020
Artikel ini memperlihatkan kepada Anda cara mengimpor repositori Git yang ada dari GitHub, Bitbucket, GitLab, atau lokasi lain ke dalam repositori baru atau kosong yang ada di proyek Azure DevOps Anda.
Prasyarat
| Kategori | Persyaratan |
|---|---|
| Akses proyek | Anggota proyek . |
| Izin | - Lihat kode dalam proyek privat: Setidaknya akses Dasar. - Mengkloning atau berkontribusi pada kode dalam proyek privat: Anggota grup keamanan Kontributor atau izin yang setara dalam proyek. - Mengatur izin cabang atau repositori: Kelola izin untuk cabang atau repositori. - Ubah cabang default: Edit kebijakan dan izin untuk repositori. - Impor repositori: Anggota Administrator Proyek grup keamanan atau tingkat proyek Git Membuat repositori izin diatur ke Izinkan. Untuk informasi selengkapnya, lihat Mengatur izin repositori Git. |
| Layanan | Repos diaktifkan. |
| Alat | Opsional. Gunakan perintah az repos: Azure DevOps CLI. |
Catatan
Dalam proyek publik, pengguna dengan akses Stakeholder memiliki akses penuh ke Azure Repos, termasuk melihat, mengkloning, dan berkontribusi terhadap kode.
| Kategori | Persyaratan |
|---|---|
| Akses proyek | Anggota proyek . |
| Izin | - Lihat kode: Setidaknya akses Dasar. - Mengkloning atau berkontribusi pada kode: Anggota kelompok keamanan Kontributor atau izin yang sesuai dalam proyek. |
| Layanan | Repos diaktifkan. |
Mengimpor ke repositori baru
Lakukan langkah-langkah berikut untuk mengimpor ke repositori baru:
Catatan
Ketika impor repositori selesai, Azure DevOps mengatur cabang Default untuk repositori yang diimpor tersebut. Jika repositori yang diimpor berisi cabang bernama main, repositori akan ditetapkan sebagai cabang default, jika tidak, cabang pertama (dalam urutan alfabet) dari repositori yang diimpor diatur sebagai Default.
Di browser Anda, masuk ke organisasi Anda dan pilih Repos>File.
Dari menu drop-down repositori, pilih Impor repositori.
Masukkan URL kloning repositori sumber dan nama untuk repositori Git baru Anda.
- Pilih Impor repositori.
Repositori akan diimpor.
Impor ke dalam repositori kosong yang ada
Pada halaman File dari repositori Git kosong, pilih Impor dan masukkan URL kloning. Berikan kredensial jika repositori sumber memerlukan autentikasi.
Catatan
Fitur impor menonaktifkan penautan otomatis untuk item kerja yang disebutkan dalam komentar penerapan karena ID item kerja dalam proyek tujuan mungkin tidak sama dengan yang ada di proyek sumber. Penautan otomatis untuk item kerja yang disebutkan dalam komit dapat diaktifkan kembali dengan menavigasi ke Pengaturan, Kontrol Versi, memilih repositori Anda, dan memilih Opsi. Untuk informasi selengkapnya tentang mengaitkan commit dengan item kerja, lihat Mengaitkan item kerja dengan commit
Mengimpor repositori secara manual menggunakan CLI az repos
Anda dapat menggunakan az repos import untuk mengimpor repositori ke proyek Azure DevOps Anda.
Anda harus terlebih dahulu membuat repositori di Azure DevOps sebelum dapat mengimpor repositori Git. Selain itu, repositori yang Anda buat harus kosong. Untuk membuat repositori, lihat Membuat repositori Git Anda di Azure Repos.
az repos import create --git-source-url
[--detect {false, true}]
[--git-service-endpoint-id]
[--org]
[--project]
[--repository]
[--requires-authorization]
[--subscription]
[--user-name]
Parameter
| Pengaturan | Deskripsi |
|---|---|
git-source-url |
Harus diisi. URL repositori git sumber untuk diimpor. |
detect |
Opsional. Mendeteksi organisasi secara otomatis. Nilai yang diterima: false, true. |
git-service-endpoint-id |
Opsional. Titik Akhir Layanan untuk koneksi ke titik akhir eksternal. |
org, organization |
URL organisasi Azure DevOps. Anda dapat mengonfigurasi organisasi default dengan menggunakan az devops configure -d organization=<ORG_URL>.
Diperlukan jika tidak dikonfigurasi sebagai default atau diambil melalui konfigurasi git. Contoh: https://dev.azure.com/MyOrganizationName/. |
project, p |
Nama atau ID proyek. Anda dapat mengonfigurasi proyek default menggunakan az devops configure -d project=<NAME_OR_ID>.
Diperlukan jika tidak dikonfigurasi sebagai bawaan atau diambil dari konfigurasi git. |
repository |
Nama atau ID repositori untuk membuat permintaan impor. |
requires-authorization |
Bendera untuk menunjukkan apakah repositori git sumber bersifat privat. Jika Anda memerlukan autentikasi, buat token autentikasi pada repositori sumber dan atur variabel AZURE_DEVOPS_EXT_GIT_SOURCE_PASSWORD_OR_PAT lingkungan ke nilai token. Untuk keamanan yang ditingkatkan, sebaiknya gunakan token ID Microsoft Entra jika memungkinkan. Kemudian permintaan impor menyertakan autentikasi. |
subscription |
Nama atau ID langganan. Anda dapat mengonfigurasi langganan default menggunakan az account set -s <NAME_OR_ID>. |
user-name |
Nama pengguna untuk menentukan kapan repositori git bersifat privat. |
Contoh
Perintah berikut mengimpor repositori publik fabrikam-open-source ke repositori Git kosong fabrikam-open-source untuk konfigurasi az devops configure --defaults organization=https://dev.azure.com/fabrikamprime project="Fabrikam Fiber"default .
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"
}
Mengimpor repositori secara manual menggunakan git CLI
Kloning repositori sumber ke folder sementara di komputer Anda menggunakan
bareopsi , seperti yang ditunjukkan dalam contoh baris perintah berikut, lalu navigasi ke folder repositori. Saat mengkloning menggunakanbareopsi , nama folder menyertakan akhiran.git. Dalam contoh ini,https://github.com/contoso/old-contoso-repo.gitadalah repositori sumber yang akan diimpor secara manual.git clone --bare https://github.com/contoso/old-contoso-repo.git cd old-contoso-repo.gitBuat repositori target dan catat URL kloning. Dalam contoh ini,
https://dev.azure.com/contoso-ltd/MyFirstProject/_git/new-contoso-repoadalah URL untuk repositori target baru.Jalankan perintah berikut untuk menyalin repositori sumber ke repositori target.
git push --mirror https://dev.azure.com/contoso-ltd/MyFirstProject/_git/new-contoso-repoPeringatan
Menggunakan
--mirrormengganti semua cabang dalam repositori target, yang mencakup penghapusan cabang apa pun yang tidak ada dalam repository sumber.Jika repositori sumber memiliki objek LFS, ambil, dan salin dari repositori sumber ke repositori target.
git lfs fetch origin --all git lfs push --all https://dev.azure.com/contoso-ltd/MyFirstProject/_git/new-contoso-repoHapus folder sementara dengan menjalankan perintah berikut.
cd .. rm -rf old-contoso-repo.git
Pertanyaan Umum
Meskipun impor paling sering berhasil, kondisi berikut dapat menyebabkan masalah.
- Bagaimana jika repositori Sumber saya berada di belakang autentikasi dua faktor?
- Bagaimana jika repositori sumber saya tidak mendukung multi_ack?
- Bisakah saya mengimpor dari versi lokal sebelumnya?
- Dapatkah saya menggunakan kredensial berbasis MSA?
- Dapatkah saya mengimpor dari TFVC?
- Bagaimana jika repositori sumber saya berisi objek Git LFS?
T: Bagaimana jika repositori sumber saya berada di belakang autentikasi dua faktor?
J: Layanan impor menggunakan REST API untuk memvalidasi dan memicu impor dan tidak dapat bekerja langsung dengan repositori yang memerlukan autentikasi dua faktor.
Sebagian besar penyedia hosting Git mendukung token autentikasi yang dapat disediakan ke layanan impor:
Token ID Microsoft Entra (disarankan): Token ID Microsoft Entra memberikan keamanan yang lebih baik dan merupakan metode autentikasi yang direkomendasikan. Anda dapat memperoleh token ini melalui:
Azure CLI (untuk pengembangan/pengujian):
az account get-access-token --resource 499b84ac-1321-427f-aa17-267ca6975798 --query "accessToken" --output tsvPrincipal Layanan (untuk skenario produksi/otomatis):
- Mendaftarkan aplikasi di ID Microsoft Entra
- Membuat rahasia klien untuk aplikasi
- Memberikan izin yang sesuai untuk aplikasi di Azure DevOps
- Gunakan kredensial perwakilan layanan untuk mendapatkan token secara terprogram
Token Akses Pribadi (alternatif):GitHub dan Azure DevOps juga mendukung token akses pribadi.
T: Bagaimana jika repositori sumber saya tidak mendukung multi_ack?
A: Layanan impor menggunakan fitur multi_ack dari protokol Git selama proses impor. Jika repositori sumber tidak menyediakan kemampuan ini, layanan impor dapat gagal mengimpor dari sumber tertentu. Kegagalan ini dapat terjadi saat membuat permintaan impor atau saat impor sedang berlangsung.
T: Dapatkah saya mengimpor dari versi sebelumnya?
A: Jika repositori Git sumber berada dalam versi lokal yang lebih lama dari RTM 2017, impor gagal, karena ketidakcocokan kontrak antara Azure DevOps terbaru dan versi sebelumnya.
T: Dapatkah saya menggunakan kredensial berbasis MSA?
J: Sayangnya, kredensial berbasis MSA (Akun Microsoft) tidak berfungsi. Layanan impor bergantung pada autentikasi dasar untuk berkomunikasi dengan repositori sumber. Jika nama pengguna dan kata sandi yang Anda gunakan bukan autentikasi dasar, autentikasi dan impor gagal. Salah satu cara untuk memeriksa apakah nama pengguna / kata sandi yang Anda gunakan adalah autentikasi dasar adalah dengan mencoba menggunakan Git untuk mengkloning repositori Anda menggunakan format berikut:
git clone https://<<username>>:<<password>>@<<remaining clone Url>>
T: Dapatkah saya mengimpor dari TFVC?
A: Anda dapat memigrasikan kode dari repositori TFVC yang ada ke repositori Git baru dalam akun yang sama. Meskipun bermigrasi ke Git memberikan banyak manfaat, proses ini cukup kompleks untuk repositori dan tim TFVC yang besar. Sistem kontrol versi terpusat, seperti TFVC, berprilaku berbeda dari Git dengan cara mendasar. Perubahan melibatkan lebih dari sekadar mempelajari perintah baru. Ini adalah perubahan mengganggu yang membutuhkan perencanaan yang cermat. Untuk informasi selengkapnya, lihat Mengimpor dari TFVC ke Git.
T: Bagaimana jika repositori sumber saya berisi objek Git LFS?
A: Impor Git tidak mengimpor objek Git LFS.
Objek LFS dapat dipindahkan menggunakan langkah-langkah berikut:
- Impor repositori menggunakan fitur repositori impor ke Azure DevOps. Tindakan ini menyalin semua objek Git dari sumber ke Azure DevOps, yang juga mengimpor pointer LFS yang merupakan objek Git, tetapi bukan file LFS
Untuk memindahkan file LFS, Anda memerlukan klien Git.exe dan LFS dalam kotak yang sama dan akses ke repositori sumber dan repositori tujuan
- Kloning repositori yang diimpor dari Azure DevOps ke sistem lokal. Kloning berfungsi, tetapi gagal saat melakukan checkout file LFS
- Tambahkan repositori sumber sebagai "remote," misalnya, "sumber"
- Lakukan
git lfs fetch source --all, yang membawa semua file LFS dari sumber ke repositori lokal Anda - Dengan asumsi repositori VSTS tujuan Anda adalah "remote" target
- Lakukan
git lfs push target --all
T: Dapatkah saya mengimpor pembaruan jika sumber berubah nanti?
A: Layanan impor adalah untuk awalnya mengimpor seluruh repositori. Untuk mencerminkan perubahan nanti, Anda memerlukan klon lokal repositori dengan remote yang ditetapkan pada sumber dan tujuan.
Anda dapat menyinkronkan perubahan menggunakan perintah berikut.
Kami memperlakukan impor Azure Repos sebagai origin dan repositori asli sebagai 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