在构建我们的项目时,我希望将每个存储库的mercurial id嵌入到该存储库(库,应用程序或测试应用程序)的产品中.
我发现,如果您确切地知道构建他们正在使用的特定应用程序版本的内容,那么调试客户运行的应用程序将更加容易8个时区.因此,我们系统中的每个项目(应用程序或库)都实现了获取相关修订信息的方法.
我还发现能够查看应用程序是否已使用存储库中的干净(未修改)更改集进行编译非常有用.当存储库中存在未提交的更改时,'Hg id'会有用地在变更集ID中附加一个+,这样我们就可以轻松查看人们是否运行了干净或修改过的代码版本.
我目前的解决方案详述如下,并满足基本要求,但存在许多问题.
目前,对于每个Visual Studio解决方案,我添加了以下"预构建事件命令行"命令:
cd $(ProjectDir)
HgID
Run Code Online (Sandbox Code Playgroud)
我还将HgID.bat文件添加到Project目录:
@echo off
type HgId.pre > HgId.cs
For /F "delims=" %%a in ('hg id') Do <nul >>HgID.cs set /p = @"%%a"
echo ; >> HgId.cs
echo } >> HgId.cs
echo } >> HgId.cs
Run Code Online (Sandbox Code Playgroud)
以及HgId.pre文件,定义为:
namespace My.Namespace {
/// <summary> Auto generated Mercurial ID class. </summary>
internal class HgID {
/// <summary> Mercurial version ID [+ is modified] [Named branch]</summary>
public const string Version =
Run Code Online (Sandbox Code Playgroud)
当我建立我的应用程序时,将触发对所有库预生成事件,创建一个新的文件HgId.cs(没有版本控制下保持),并导致库重新编译与新的"汞ID" '版本'中的字符串.
我试图从以下几个教程步骤中重现:
https://github.blog/2020-01-17-bring-your-monorepo-down-to-size-with-sparse-checkout
这是为 git 2.25 制作的,但现在在 2.27 中,运行时什么也没有发生:
$ git sparse-checkout set client/android
Run Code Online (Sandbox Code Playgroud)
我找不到让它工作的方法。
这是一个 MWE:
$ git clone --no-checkout https://github.com/derrickstolee/sparse-checkout-example
Cloning into 'sparse-checkout-example'...
$ cd sparse-checkout-example/
$ git sparse-checkout init --cone
Run Code Online (Sandbox Code Playgroud)
使用 git 2.25,我获得了一个非空目录:
$ ls -a
. .. bootstrap.sh LICENSE.md README.md .git
Run Code Online (Sandbox Code Playgroud)
使用 git 2.27,我获得了一个空目录:
$ ls -a
. .. .git
Run Code Online (Sandbox Code Playgroud) 我正在使用CMake来完成我的项目的核外/源外构建,并希望在项目中包含"git describe --tags --dirty"的结果作为版本号(仅供参考bug.但是,任何尝试告诉git代码repo所在的任何尝试都会导致错误,例如"致命:不是git存储库(或任何父目录):.git".
除了当前的工作目录之外,有没有办法指定git应该在哪里查找repo?