我正在使用CMake来完成我的项目的核心外/源外构建,并希望将“git describe --tags --dirty”的结果包含在版本号中该项目(仅供参考bug)。但是,尝试告诉git代码repo所在的任何尝试都会导致类似“致命:不是git存储库(或任何父目录)”的错误:.git“。
除了当前工作目录之外,有没有办法指定git应该在哪里查找repo?
答案 0 :(得分:5)
您可以将git
与--git-dir
- 参数一起使用。
答案 1 :(得分:3)
您可以在命令行中指定--git-dir
,或在环境中设置GIT_DIR
,或将路径写入名为.git
的文件:echo gitdir: /path/to/.git > .git
或制作软件链接到回购:ln -s /path/to/.git
。
(最后两个选项可能是最不可取的,仅为了完整性而在此处提及。)
答案 2 :(得分:2)
或者您可以使用来自cmake的WORKING_DIRECTORY
- execute_process()
参数。这就是我的工作:
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}
。
答案 3 :(得分:0)
您可以在命令行上指定--git-dir
当心:在Git 2.21(2019年2月)之前这不能完全起作用:
“ git --work-tree=$there --git-dir=$here describe --dirty
”无法正确运行,因为它没有注意用户错误指定的工作树的位置,该错误已得到纠正。
请参见commit c801170的commit 2ed5c8e,Sebastian Staudt (koraktor
)(2019年2月3日)。
(由Junio C Hamano -- gitster
--在commit a1e1900中合并,2019年2月7日)
describe
:为--dirty
设置工作树运行内置
NEED_WORK_TREE
时不使用git-describe
, 因为即使在裸仓库中您也应该能够描述提交。 但是,--dirty
标志确实需要工作树。因为我们不打电话setup_work_tree()
,它使用我们碰巧所在的任何目录。 不太可能匹配我们的索引,这意味着即使真实 工作树很干净。我们可以通过在知道用户后致电
setup_work_tree()
来解决此问题 要求提供--dirty
。
--broken
选项也需要一个工作树。但是,由于其实现调用git-diff-index
,因此我们不必在git-describe
流程中设置工作树。