3

我正在使用 CMake 对我的项目进行核外/源外构建,并希望将“git describe --tags --dirty”的结果作为版本号包含在项目中(仅供参考错误)。但是,任何尝试告诉 git 代码仓库在哪里的尝试都会导致错误,例如“致命:不是 git 存储库(或任何父目录):.git”。

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

4

4 回答 4

5

您可以git--git-dir-argument 一起使用。

于 2013-02-28T22:15:52.713 回答
3

您可以--git-dir在命令行中指定,或者GIT_DIR在环境中设置,或者将路径写入名为.git:的文件中,或者echo gitdir: /path/to/.git > .git对 repo: 进行软链接ln -s /path/to/.git

(最后两个选项可能是最不可取的,这里只是为了完整起见。)

于 2013-02-28T22:16:46.970 回答
3

或者您可以使用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}.

于 2013-02-28T22:18:52.823 回答
1

您可以在命令行上指定 --git-dir

注意:这在 Git 2.21(2019 年 2 月)之前无法完全正常工作:
git --work-tree=$there --git-dir=$here describe --dirty”没有正常工作,因为它没有注意用户错误指定的工作树的位置,已更正。

请参阅Sebastian Staudt ( ) 的commit c801170commit 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过程中设置工作树。

于 2019-03-09T23:24:44.270 回答