在当前目录之外获取GIT构建哈希

时间:2013-02-28 22:14:26

标签: git cmake

我正在使用CMake来完成我的项目的核心外/源外构建,并希望将“git describe --tags --dirty”的结果包含在版本号中该项目(仅供参考bug)。但是,尝试告诉git代码repo所在的任何尝试都会导致类似“致命:不是git存储库(或任何父目录)”的错误:.git“。

除了当前工作目录之外,有没有办法指定git应该在哪里查找repo?

4 个答案:

答案 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 c801170commit 2ed5c8eSebastian 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流程中设置工作树。