如果源存储库公开可用,只需输入源存储库的 克隆 URL 和新 Git 存储库的名称。
如果源存储库是专用存储库,但可以使用基本身份验证 (用户名-密码、个人访问令牌等) 访问,请选择 “需要授权 ”并输入凭据。 不支持 SSH 身份验证,但可以按照 Git CLI 手动导入存储库中的步骤,手动导入使用 SSH 身份验证的存储库。
如果源存储库公开可用,只需输入源存储库的 克隆 URL 和新 Git 存储库的名称。
如果源存储库是专用存储库,但可以使用基本身份验证 (用户名-密码、个人访问令牌等) 访问,请选择 “需要授权 ”并输入凭据。 不支持 SSH 身份验证,但可以按照 Git CLI 手动导入存储库中的步骤,手动导入使用 SSH 身份验证的存储库。
导入到现有的空存储库
在空 Git 存储库的 “文件” 页上,选择“ 导入 ”并 输入克隆 URL。 如果源存储库需要身份验证,则需要提供凭据。
导入功能禁用提交注释中提到的工作项的自动链接,因为目标项目中的工作项 ID 可能与源项目中的工作项 ID 不同。 可以通过导航到“设置”、“版本控制”、“选择存储库”和“选项”来重新启用提交中提到的工作项的自动链接。 有关将提交与工作项链接的详细信息,请参阅 将工作项链接到提交
使用 az repos CLI 手动导入存储库
可以使用 az repos import 将存储库导入到 Azure DevOps 项目。
必须先在 Azure DevOps 中创建存储库,然后才能导入 Git 存储库。 此外,创建的存储库必须为空。 若要创建存储库,请参阅在 Azure Repos 中创建 Git 存储库。
az repos import create --git-source-url
[--detect {false, true}]
[--git-service-endpoint-id]
[--org]
[--project]
[--repository]
[--requires-authorization]
[--subscription]
[--user-name]
org
, organization
Azure DevOps 组织 URL。 You can configure the default organization by using az devops configure -d organization=<ORG_URL>
. 如果未配置为默认配置或通过 git 配置进行选取,则为必需。示例: https://dev.azure.com/MyOrganizationName/
.
project
, p
项目的名称或 ID。 可以使用 .. 配置默认项目 az devops configure -d project=<NAME_OR_ID>
。 如果未配置为默认配置或通过 git 配置进行选取,则为必需。
repository
要在其中创建导入请求的存储库的名称或 ID。
requires-authorization
用于指示源 git 存储库是否为专用的标志。 如果需要身份验证,请在源存储库上生成身份验证令牌,并将环境变量 AZURE_DEVOPS_EXT_GIT_SOURCE_PASSWORD_OR_PAT
设置为令牌的值。 然后,导入请求将包括身份验证。
subscription
订阅的名称或 ID。 可以使用 az account set -s <NAME_OR_ID>
配置默认订阅。
user-name
指定 git 存储库专用时的用户名。
以下命令将公共存储库 fabrikam-open-source 导入到默认配置的az devops configure --defaults organization=https://dev.azure.com/fabrikamprime project="Fabrikam Fiber"
空 Git 存储库 fabrikam-open-source。
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"
使用 git CLI 手动导入存储库
导入存储库功能是在 TFS 2017 Update 1 中引入的。 如果使用 TFS 2017 RTM 或更早版本,可以使用以下步骤手动将存储库导入 TFS。 还可以按照以下步骤手动将存储库导入Azure DevOps Services存储库,方法是将 TFS 替换为以下步骤中的Azure Repos。
使用 bare
此选项将源存储库克隆到计算机上的临时文件夹,如以下命令行示例所示,然后导航到存储库的文件夹。 使用 bare
此选项克隆时,文件夹名称包括 .git
后缀。 在此示例中, https://github.com/contoso/old-contoso-repo.git
是要手动导入的源存储库。
git clone --bare https://github.com/contoso/old-contoso-repo.git
cd old-contoso-repo.git
使用 TFS 2017 RTM 创建目标存储库,并记下克隆 URL。 在此示例中, https://dev.azure.com/contoso-ltd/MyFirstProject/_git/new-contoso-repo
是新目标存储库的 URL。
运行以下命令,将源存储库复制到目标存储库。
git push --mirror https://dev.azure.com/contoso-ltd/MyFirstProject/_git/new-contoso-repo
使用 --mirror
将覆盖目标存储库中的所有分支,其中包括删除源存储库中不包含的任何分支。
如果源存储库具有 LFS 对象,则提取它们,并将其从源存储库复制到目标存储库。
git lfs fetch origin --all
git lfs push --all https://dev.azure.com/contoso-ltd/MyFirstProject/_git/new-contoso-repo
运行以下命令删除临时文件夹。
cd ..
rm -rf old-contoso-repo.git
尽管大多数情况下导入成功,但以下条件可能会导致问题。
如果我的源存储库落后于双重身份验证,该怎么办?
如果我的源存储库不支持multi_ack,该怎么办?
是否可以从早期版本的 Team Foundation Server 导入?
是否可以使用基于 MSA 的凭据?
是否可以从 TFVC 导入?
如果源存储库包含 Git LFS 对象,该怎么办?
如果我的源存储库落后于双重身份验证,该怎么办?
导入服务使用 REST API 来验证和触发导入,并且不能直接使用需要双重身份验证的存储库。
大多数 Git 托管提供商(如 GitHub)和Azure DevOps Services支持可提供给导入服务的个人令牌。
如果我的源存储库不支持multi_ack,该怎么办?
导入服务在导入过程中使用 Git 协议的 multi_ack 功能。
如果源存储库不提供此功能,则导入服务可能无法从给定源导入。
创建导入请求或导入正在进行时,可能会发生此失败。
是否可以从早期版本的 Team Foundation Server 导入?
如果源 Git 存储库位于早于 TFS 2017 RTM 的 TFS 版本中,则导入将失败。
这是因为最新的 Azure DevOps Services/TFS 与 2017 年早期 RTM 版本的 TFS 之间的协定不匹配。
是否可以使用基于 MSA 的凭据?
遗憾的是,MSA (Microsoft 帐户,以前基于 Live ID) 的凭据将不起作用。 导入服务依赖于基本身份验证来与源存储库通信。 如果使用的用户名/密码不是基本身份验证,身份验证将失败,导入将失败。
检查所使用的用户名/密码是否为基本身份验证的一种方法是尝试使用 Git 克隆存储库,格式如下
git clone https://<<username>>:<<password>>@<<remaining clone Url>>
是否可以从 TFVC 导入?
可以将代码从现有 TFVC 存储库迁移到同一帐户中的新 Git 存储库。 迁移到 Git 具有许多好处,但对于大型 TFVC 存储库和团队来说,这是一个涉及的过程。 集中式版本控制系统(如 TFVC)的行为与 Git 在基本方面的行为不同。 此开关比学习新命令要多得多。 这是一项中断性变更,需要仔细规划。 有关详细信息,请参阅 从 TFVC 导入 Git。
如果源存储库包含 Git LFS 对象,该怎么办?
Git 导入不会导入 Git LFS 对象。
可以使用以下步骤移动 LFS 对象:
使用导入存储库功能将存储库导入 Azure DevOps。
这会从源复制到 Azure DevOps 的所有 Git 对象, (这也将导入 LFS 指针,这些指针是 Git 对象,但不是 LFS 文件)
若要在 LFS 文件中移动 (需要在同一框中Git.exe和 LFS 客户端,以及访问源存储库和目标存储库)
将导入的存储库从 Azure DevOps 克隆到本地系统,但执行 LFS 文件签出时会失败
将源存储库添加为远程 (说“source”)
执行 git lfs fetch source --all
(此操作会将源中的所有 LFS 文件引入本地存储库)
假设目标 VSTS 存储库是“目标”远程存储库
执行 git lfs push target --all
如果源以后发生更改,是否可以导入更新?
导入服务最初用于导入整个存储库。
若要镜像以后的更改,需要将远程数据库设置为源和目标的存储库的本地克隆。
可以使用以下命令同步更改。
我们将Azure Repos导入视为origin
原始存储库upstream
。
git clone --bare <Azure-Repos-clone-URL>
cd <name-of-repo>
git remote add --mirror=fetch upstream <original-repo-URL>
git fetch upstream --tags
git push origin --all
Git 存储库的新增功能? 了解更多
在 Git 教程中详细了解 Git