1

我正在询问使用在我的 Web 应用程序中发出 git bash 终端命令时收到的值的可能性,以使用 AngularJS 创建修改后的语义版本控制方案。

我通过发出来检索我的计数

git rev-list HEAD --count

和缩写哈希

git rev-parse --short HEAD

这些命令返回我感兴趣的值,现在我的问题是,是否有可能以某种可用的方式获取这些值以在我的页面中引用,如果是这样,是否有合适的方法使用 Angular 来做到这一点?

4

2 回答 2

0

编辑

在继续研究该主题的同时,我在第一个答案中遇到了一些问题。对于此项目,由于 git bash 终端的硬编码路径因工作站而异,因此在 Visual Studio 中执行预构建命令会与其他团队成员发生冲突。为了解决这个问题,我介绍了利用git hooks的想法,在 git 中的提交后操作上运行 Shell 脚本。这种方法将确保手头的任务将被普遍完成,指向每个工作站上的本地 git bash,减少在 git bash 路径变化的情况下破坏构建的可能性(这是一种可能的情况)。

这是我的新解决方案

在您的本地存储库中导航.git > hooks > post-commit.sample并替换为以下内容

revision=$(git rev-parse --short HEAD);

build=$(git rev-list HEAD --count); 

version=$"{"$'"build":''"'$build$'"'$","$'"revision":'$'"'$revision$'"'$"}"; 

echo $version > "YourWebProject\version.txt";

确保重命名pre-commit.samplepre-commitwhich 将使脚本现在可以在操作时执行。执行后,我们将生成一个生成的文本文件,其结构类似于以下 JSON 对象

{
    "build":"# representing your git commit count",
    "revision":"abbreviated hash for last commit"
}

创建你的 Angular 控制器

function VersioningCtrl($scope, $http) {
    $http.get('version.txt')
    .success(function (data) {
        if (data && status === 200) {
            $scope.version = {
                build: data.build,
                revision: data.revision
            }
        }
    });
}

标记

<div data-ng-controller="VersioningCtrl">
    Version 0.0.{{ version.build }}.{{ version.revision }}
</div>

另一个问题

由于这个文件是动态生成的,我发现将它包含在 git ignore 文件中是有益的,这会导致之前的 git 问题提示我始终提交和跟踪新文件。

我发现这个解决方案更加通用和高效

于 2013-11-01T00:21:08.437 回答
0

第一个解决方案(见第二个答案)

1.您的解决方案>右键单击>属性>构建事件>编辑预构建:

"C:\Program Files (x86)\Git\bin\git.exe" rev-list HEAD --count > "$(ProjectDir)build.txt"
"C:\Program Files (x86)\Git\bin\git.exe" rev-parse --short HEAD > "$(ProjectDir)revision.txt"

这将在您的下一次构建时创建两个文本文件,在这种情况下,build.txt它们revision.txt将位于您的项目文件夹中。然后在您的应用程序中引用这些文件

2.您的解决方案>右键单击>添加>现有项目>导航到您的文本文件

3.两个文本文件>右键>属性:

Build Action: Embedded Resource

Copy to Output Directory: Copy Always

4. 角度控制器

function VersioningCtrl($scope, $http) {
     $http.get('revision.txt')
          .success(function (data) {
          if (data && status === 200) {
              $scope.revision = data;
          }
      });

     $http.get('build.txt')
          .success(function (data) {
          if (data && status === 200) {
              $scope.build = data;
          }
     });
}

5. 标记

<div data-ng-controller="VersioningCtrl">
    <p>Version 0.0.{{ build }}.{{ revision }}</p>
</div>
于 2013-10-21T19:00:42.407 回答