如何在VSCode基新版Unified Vitis IDE中使用Git做版本控制?
新版Unified Vitis(VSCode版)的Git协作工作流问题
我的问题和某Stack Overflow问题类似,但使用Git而非Mercurial,且基于VSCode架构的新版「Unified Vitis」(而非旧版Eclipse架构的Vitis)。新旧版Vitis差异极大,因此本问题并非重复提问。
根据官方说明,新旧版Vitis均“支持”Git,但我始终找不到可落地的多人协作工作流。旧版Vitis具备「导入/导出项目向导」功能,但新版已移除;Xilinx官方论坛提到该功能计划在2024.1版本恢复。用户指南UG1400(2023-12-13)的「源代码控制」章节仅介绍了在Vitis GUI中执行git add的操作,完全未说明如何实现可协作的项目版本控制。
核心痛点
Vitis版本控制的核心问题在于它会生成大量包含绝对路径的文件。即便使用自动生成的.gitignore,仍会纳入大量IDE内部文件,这些文件中的绝对路径会导致其他开发者拉取代码后出现构建错误。
当前解决方案
我目前的做法是不对Vitis管理的平台和应用文件夹做版本控制,而是通过Vitis Python CLI,仅将Vitis必需的「关键文件」(链接脚本、CMake文件等)和一个空源文件纳入Git管理。CMakeLists.txt指定从原始源目录读取代码,目录结构如下:
"ROOT_PATH" ├── build-vitis (不做版本控制! │ Vitis相关:「platform」和「application」文件夹。) ├── build-vivado (Vivado输出文件,如.xsa文件) ├── src │ ├── CMakeLists.txt │ ├── lscript.ld │ ├── main.cpp | | (更多源码在子目录中...) │ ├── NOTUSED.cpp | | (空文件,用于让Vivado识别为存在源码) │ └── UserConfig.cmake └── tools ├── build_app.py └── ...
简化后的build_app.py代码如下:
import vitis import os ROOT_PATH = <包含`tools`目录的路径,用户指定或从当前目录推导> # 属于Vitis的文件夹,已加入.gitignore VITIS_BUILD_DIR_PATH = os.path.abspath( os.path.join(ROOT_PATH, "build-vitis") ) os.makedirs(VITIS_BUILD_DIR_PATH, exist_ok=True) EXPECTED_XSA_FILE_PATH = os.path.abspath( os.path.join(ROOT_PATH, "build-vivado", "<filename>.xsa") ) COMPONENT_NAME = "MYCOMPONENT" MAIN_SRC_PATH = os.path.join(ROOT_PATH, "src") client = vitis.create_client() client.set_workspace(path=VITIS_BUILD_DIR_PATH) PLATFORM_NAME = "platform_baremetal" platform = client.create_platform_component( name=PLATFORM_NAME, hw=EXPECTED_XSA_FILE_PATH, os="standalone", cpu="<mycpu>", ) platform = client.get_platform_component(name=PLATFORM_NAME) status = platform.build() comp = client.create_app_component( name=COMPONENT_NAME, platform=os.path.join( VITIS_BUILD_DIR_PATH, PLATFORM_NAME, "export", PLATFORM_NAME, f"{PLATFORM_NAME}.xpfm", ), domain="<mydomainname>", ) comp = client.get_component(name=COMPONENT_NAME) status = comp.import_files( from_loc=os.path.join(MAIN_SRC_PATH), files=[ # 注意:实际C/C++源码未导入! "CMakeLists.txt", "UserConfig.cmake", "lscript.ld", "NOTUSED.cpp" # 空文件 ], dest_dir_in_cmp="src", ) comp.build()
克隆仓库后,通过vitis -s tools/build_app.py执行脚本(实际脚本会检查平台/应用是否存在,仅在需要时更新)。
现有方案的缺点
- 若通过Vitis修改了配置文件(CMake、链接脚本等),需手动将改动复制回
src目录才能提交到Git; - 通过CMake指定源码目录后,在Vitis中编辑源码时,IDE无法识别头文件和命名空间,导致语法高亮、代码补全等功能异常。
请问是否有更优的解决方案?
内容的提问来源于Stack Exchange,提问作者Adomas Baliuka
相关产品推荐
相关产品推荐

