我正在使用 CMake 对我的项目进行核外/源外构建,并希望将“git describe --tags --dirty”的结果作为版本号包含在项目中(仅供参考错误)。但是,任何尝试告诉 git 代码仓库在哪里的尝试都会导致错误,例如“致命:不是 git 存储库(或任何父目录):.git”。
除了当前工作目录之外,有没有办法指定 git 应该在哪里寻找 repo?
您可以git与--git-dir-argument 一起使用。
您可以--git-dir在命令行中指定,或者GIT_DIR在环境中设置,或者将路径写入名为.git:的文件中,或者echo gitdir: /path/to/.git > .git对 repo: 进行软链接ln -s /path/to/.git。
(最后两个选项可能是最不可取的,这里只是为了完整起见。)
或者您可以使用WORKING_DIRECTORY-argumentexecute_process()从 cmake。这就是我所做的:
execute_process(COMMAND "${GIT_EXECUTABLE}" describe --tags --dirty
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
RESULT_VARIABLE res
OUTPUT_VARIABLE out
ERROR_QUIET
OUTPUT_STRIP_TRAILING_WHITESPACE)
然后我有${out}.
您可以在命令行上指定 --git-dir
注意:这在 Git 2.21(2019 年 2 月)之前无法完全正常工作:
“ git --work-tree=$there --git-dir=$here describe --dirty”没有正常工作,因为它没有注意用户错误指定的工作树的位置,已更正。
请参阅Sebastian Staudt ( ) 的commit c801170和commit 2ed5c8e(2019 年 2 月 3 日)。(由Junio C Hamano 合并 -- --在提交 a1e1900中,2019 年 2 月 7 日)koraktor
gitster
describe: 设置工作树--dirty
NEED_WORK_TREE我们在运行内置时不使用git-describe,因为即使在裸存储库中您也应该能够描述提交。但是,该--dirty标志确实需要一个工作树。由于我们不调用setup_work_tree(),它使用我们碰巧所在的任何目录。这不太可能与我们的索引匹配,这意味着即使真正的工作树是干净的,我们也会说“脏”。一旦我们
setup_work_tree()知道用户请求了--dirty.该
--broken选项还需要一个工作树。但是因为它的实现调用git-diff-index我们不必在git-describe过程中设置工作树。