在通过 Git 获取内容后,如何不处于"detached head"状态?



我使用CMake的FetchContent_Declare和FetchContent_Populate从Git存储库下载依赖项。它看起来像这样:

FetchContent_Declare(my_subproject
GIT_REPOSITORY http://127.0.0.1/my_subproject.git
GIT_TAG master
)
FetchContent_GetProperties(my_subproject)
if(NOT my_subproject_POPULATED)
FetchContent_Populate( my_subproject )
endif()
target_link_libraries ( ${EXE_TARGET} my_subproject )

下载/克隆看起来很好,但是my_subproject处于分离的头部状态:它指向"origin/master",而不是指向本地的"master";分支。

关于如何制作FetchContent_Populate"指向本地的"主人";分支?

我使用CMake 3.21.1。这个"issue"在CMake 3.17.2中不存在

我只找到了这个替代解决方案:

execute_process(COMMAND git checkout ${_GIT_TAG} WORKING_DIRECTORY ${_SOURCE_DIR})

如果您在FetchContent_Populate()FetchContent_MakeAvailable()之后执行此操作,您将不在detached HEAD中。

但是请记住CMake不支持抓取分支。你应该从git标签或提交SHA1中获取。

如果有人有更好的解决方案,我很感兴趣。

相关内容

最新更新