我正在寻找一个替代"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
Run Code Online (Sandbox Code Playgroud)
有了这个神奇的数字,以后可以做到:
cj@zap:~/git_test$ git checkout 72ce5f3e13c61f76fde5c58cefc85eed91b6f1f8
Run Code Online (Sandbox Code Playgroud)
我回到了原来的位置.
更新:我认为如果我从VonC提供的脚本中取出一些部分并将它们放入我的构建文件中,我将获得我正在寻找的结果.
更新:
关于"git describe"的说明.在分支历史记录中,您需要一个真正的标记(标记-a)来完成这项工作,否则您将得到类似的结果.
fatal: cannot describe '72ce5f3e13c61f76fde5c58cefc85eed91b6f1f8'
Run Code Online (Sandbox Code Playgroud)
但请注意,结帐似乎仍然有效,即使这是一条错误消息.
git checkout 72ce5f3e13c61f76fde5c58cefc85eed91b6f1f8
Run Code Online (Sandbox Code Playgroud)
正常的事情似乎是你创建类似"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
Run Code Online (Sandbox Code Playgroud)
因此,当您describe正确使用它确实有效并可能产生更人性化的结果时,它也非常有用.
小智 73
我知道答案已被接受,但这可能有助于寻找远程和分支机构信息的人.
git remote show origin
Run Code Online (Sandbox Code Playgroud)
Von*_*onC 28
要完成查尔斯的答案,你也可以做一个脚本显示"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
Run Code Online (Sandbox Code Playgroud)
哪会产生类似的东西:
== 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 <duane.johnson@gmail.com>
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.
Run Code Online (Sandbox Code Playgroud)
在git中,提交ID在项目中是唯一的,即使在分布的代码中也是如此.您还可以签出提交ID,因此如果您想要一个标识符,而不是使您能够回到生成构建的代码的状态,那么您只需要提交ID.
git rev-parse HEAD
Run Code Online (Sandbox Code Playgroud)
当然,您可能希望确保工作树或索引中没有任何挂起的更改,因此您可能需要检查没有输出到这样的内容:
git diff --name-status HEAD
Run Code Online (Sandbox Code Playgroud)
或者只使用退出代码:
git diff --quiet HEAD
Run Code Online (Sandbox Code Playgroud)
您可能想要记录的关于构建机器的唯一事情是环境因素,例如工具链版本以及未来自存储库的任何工具的状态.
如果您有一个中央主存储库,您可以记录它的URL,尽管由于提交ID在项目的所有克隆中是唯一的,因此它不是识别提交的关键信息.
| 归档时间: |
|
| 查看次数: |
52060 次 |
| 最近记录: |