如何使用 HTTPS URL 请求 GIT_REPOSITORY 的密码

How to request a password for GIT_REPOSITORY using HTTPS URL

git命令理解的URL可以是HTTPS或SSH格式。

在 CMake 中,对指定的 GIT_REPOSITORY 使用 ExternalProject_Add 可以使用 git 命令理解的任何 URL。

必须提供使用 HTTPS 的用户凭据才能“克隆”私有存储库。对于ExternalProject_Add,当使用DOWNLOAD_COMMAND时,这种机制以HTTP_USERNAMEHTTP_PASSWORD的形式存在。

对于GIT_REPOSITORY好像没有这样的方法。使用时:

include( ExternalProject )

ExternalProject_Add(test
    GIT_REPOSITORY git@github.com:myuser/myprivaterepo.git
    GIT_REMOTE_NAME origin
)

在私有存储库上出现以下错误:

fatal: could not read Username for 'https://github.com': No such device or address

问题

当使用 HTTPS 连接到 ExternalProject_Add 上的私有存储库时,如何让 CMake 请求 GIT_REPOSITORY 的密码?

虽然 CMake 没有提供用于提供用户凭据的显式 Git 选项(如 HTTP_USERNAMEHTTP_PASSWORD),但您可以操纵 Git URL 以便系统提示您输入登录密码,如前所述 here。只需在 URL:

中用 @ 指定您的 username
ExternalProject_Add(test
    GIT_REPOSITORY https://username@github.com/myuser/myprivaterepo.git
    GIT_REMOTE_NAME origin
    USES_TERMINAL_DOWNLOAD ON 
)

请注意,您可能还需要启用 USES_TERMINAL_DOWNLOAD 选项以允许终端输入来输入您的凭据。您也可以直接在 URL 中提供您的密码,但最佳做法不推荐这样做:

ExternalProject_Add(test
    GIT_REPOSITORY https://username:password@github.com/myuser/myprivaterepo.git
    GIT_REMOTE_NAME origin
    USES_TERMINAL_DOWNLOAD ON 
)

作为奖励,这也适用于 Bitbucket 帐户。