当前位置:  开发笔记 > 编程语言 > 正文

Git替代"svn info"可以包含在构建中以便追溯吗?

如何解决《Git替代"svninfo"可以包含在构建中以便追溯吗?》经验,为你挑选了4个好方法。

我正在寻找一个替代"svn info"的Git.

今天我添加了一些Subversion为我提供的"svn info"命令直接进入我的构建的信息,然后将其推送到源文件中,该文件在启动时打印出来.这样我总能知道构建的来源以及如何重新获得它.

如果您有"svn info",如URL,Repository Root,Repository UUID和Revision,那么您在部署的内容和构建系统之间有一个很好的链接.如果有人报告错误,您就知道该软件的来源,并且由于该信息是自动包含的,因此人为错误的风险较小.

现在的问题是,我需要从Git获取哪些信息,以便稍后确定构建的来源?我如何使用该信息切换回该版本?

(也许我需要添加一些关于"构建计算机"的信息,因为Git已经发布了.)


更新:使用rev-parse非常有用,我有这样的东西:

cj@zap:~/git_test$ git rev-parse HEAD
72ce5f3e13c61f76fde5c58cefc85eed91b6f1f8

有了这个神奇的数字,以后可以做到:

cj@zap:~/git_test$ git checkout 72ce5f3e13c61f76fde5c58cefc85eed91b6f1f8

我回到了原来的位置.


更新:我认为如果我从VonC提供的脚本中取出一些部分并将它们放入我的构建文件中,我将获得我正在寻找的结果.


更新:

关于"git describe"的说明.在分支历史记录中,您需要一个真正的标记(标记-a)来完成这项工作,否则您将得到类似的结果.

fatal: cannot describe '72ce5f3e13c61f76fde5c58cefc85eed91b6f1f8'

这个问题也在Git Tag中描述了默认情况下的错误.

但请注意,结帐似乎仍然有效,即使这是一条错误消息.

git checkout 72ce5f3e13c61f76fde5c58cefc85eed91b6f1f8

正常的事情似乎是你创建类似"ver1.0"标签的东西,然后如果你继续工作,你得到这样的东西:

cj@zap:~/git_test$ git describe 
ver1.0-2-g4c7a057
cj@zap:~/git_test$ git tag -a ver2.0
cj@zap:~/git_test$ git describe 
ver2.0
cj@zap:~/git_test$ git commit . -m "something..."
Created commit ac38a9d: something...
 1 files changed, 1 insertions(+), 0 deletions(-)
cj@zap:~/git_test$ git describe 
ver2.0-1-gac38a9d

因此,当您describe正确使用它确实有效并可能产生更人性化的结果时,它也非常有用.



1> 小智..:

我知道答案已被接受,但这可能有助于寻找远程和分支机构信息的人.

 git remote show origin


`git remote -v`甚至更短.记得git是分布式的.回购信息是你所看到的,没有别的.如果你想要远程仓库的信息,你也碰巧推送到/取,那么`git remote`就是你想要的.`-v`显示网址.

2> VonC..:

要完成查尔斯的答案,你也可以做一个脚本显示"SN信息"之类的信息,比如这个(已经有提到)

#!/bin/bash

# author: Duane Johnson
# email: duane.johnson@gmail.com
# date: 2008 Jun 12
# license: MIT
# 
# Based on discussion at http://kerneltrap.org/mailarchive/git/2007/11/12/406496

pushd . >/dev/null

# Find base of git directory
while [ ! -d .git ] && [ ! `pwd` = "/" ]; do cd ..; done

# Show various information about this git directory
if [ -d .git ]; then
  echo "== Remote URL: `git remote -v`"

  echo "== Remote Branches: "
  git branch -r
  echo

  echo "== Local Branches:"
  git branch
  echo

  echo "== Configuration (.git/config)"
  cat .git/config
  echo

  echo "== Most Recent Commit"
  git log --max-count=1
  echo

  echo "Type 'git log' for more commits, or 'git show' for full commit details."
else
  echo "Not a git repository."
fi

popd >/dev/null

哪会产生类似的东西:

== Remote URL: origin git@github.com:canadaduane/my-project.git
== Remote Branches:
  origin/work
  trunk
  trunk@1309
  trunk@2570
  trunk@8

== Local Branches:
  master
* work

== Configuration (.git/config)
[core]
  repositoryformatversion = 0
  filemode = true
  bare = false
  logallrefupdates = true
[svn-remote "svn"]
  url = svn+ssh://svn.my-project.com/srv/svn
  fetch = my-project/trunk:refs/remotes/trunk
[remote "origin"]
  url = git@github.com:canadaduane/my-project.git
  fetch = refs/heads/*:refs/remotes/origin/*
[github]
  user = canadaduane
  repo = my-project

== Most Recent Commit
commit b47dce8b4102faf1cedc8aa3554cb58d76e0cbc1
Author: Duane Johnson 
Date:   Wed Jun 11 17:00:33 2008 -0600

    Added changes to database schema that will allow decentralization from content pointers table

type 'git log' for more, or 'git show' for full commit details.



3> CB Bailey..:

在git中,提交ID在项目中是唯一的,即使在分布的代码中也是如此.您还可以签出提交ID,因此如果您想要一个标识符,而不是使您能够回到生成构建的代码的状态,那么您只需要提交ID.

git rev-parse HEAD

当然,您可能希望确保工作树或索引中没有任何挂起的更改,因此您可能需要检查没有输出到这样的内容:

git diff --name-status HEAD

或者只使用退出代码:

git diff --quiet HEAD

您可能想要记录的关于构建机器的唯一事情是环境因素,例如工具链版本以及未来自存储库的任何工具的状态.

如果您有一个中央主存储库,您可以记录它的URL,尽管由于提交ID在项目的所有克隆中是唯一的,因此它不是识别提交的关键信息.



4> Nandan A..:

您可以通过以下方式获取我们在"svn info"中获得的远程信息:

git remote -v

推荐阅读
coco2冰冰
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有