我正在寻找一个替代"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
正确使用它确实有效并可能产生更人性化的结果时,它也非常有用.
我知道答案已被接受,但这可能有助于寻找远程和分支机构信息的人.
git remote show origin
要完成查尔斯的答案,你也可以做一个脚本显示"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 JohnsonDate: 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.
在git中,提交ID在项目中是唯一的,即使在分布的代码中也是如此.您还可以签出提交ID,因此如果您想要一个标识符,而不是使您能够回到生成构建的代码的状态,那么您只需要提交ID.
git rev-parse HEAD
当然,您可能希望确保工作树或索引中没有任何挂起的更改,因此您可能需要检查没有输出到这样的内容:
git diff --name-status HEAD
或者只使用退出代码:
git diff --quiet HEAD
您可能想要记录的关于构建机器的唯一事情是环境因素,例如工具链版本以及未来自存储库的任何工具的状态.
如果您有一个中央主存储库,您可以记录它的URL,尽管由于提交ID在项目的所有克隆中是唯一的,因此它不是识别提交的关键信息.
您可以通过以下方式获取我们在"svn info"中获得的远程信息:
git remote -v