我正在询问使用在我的 Web 应用程序中发出 git bash 终端命令时收到的值的可能性,以使用 AngularJS 创建修改后的语义版本控制方案。
我通过发出来检索我的计数
git rev-list HEAD --count
和缩写哈希
git rev-parse --short HEAD
这些命令返回我感兴趣的值,现在我的问题是,是否有可能以某种可用的方式获取这些值以在我的页面中引用,如果是这样,是否有合适的方法使用 Angular 来做到这一点?
我正在询问使用在我的 Web 应用程序中发出 git bash 终端命令时收到的值的可能性,以使用 AngularJS 创建修改后的语义版本控制方案。
我通过发出来检索我的计数
git rev-list HEAD --count
和缩写哈希
git rev-parse --short HEAD
这些命令返回我感兴趣的值,现在我的问题是,是否有可能以某种可用的方式获取这些值以在我的页面中引用,如果是这样,是否有合适的方法使用 Angular 来做到这一点?
编辑
在继续研究该主题的同时,我在第一个答案中遇到了一些问题。对于此项目,由于 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.sample
为pre-commit
which 将使脚本现在可以在操作时执行。执行后,我们将生成一个生成的文本文件,其结构类似于以下 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 问题提示我始终提交和跟踪新文件。
我发现这个解决方案更加通用和高效
第一个解决方案(见第二个答案)
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>