Back

Explore Courses Blog Tutorials Interview Questions
0 votes
2 views
in DevOps and Agile by (19.7k points)

I'm looking for a Git alternative to "svn info".

Today I added some information that Subversion gives me with the "svn info" command right into my build, and that is then pushed into a source file that prints this during startup. That way I always know where that build came from and how to get it back again.

If you have "svn info" like URL, Repository Root, Repository UUID and the Revision, you have a good link between what is deployed and the buildsystem. And if someone reports a bug you know where that software came from, and since that information was automatically included, the risk of human error is smaller.

Now the question is, what information do I need to get from Git so I can later identify where that build came from? And how do I use that information to switch back to exactly that version?

(Maybe I need to add some information about the "build computer" as well since Git is distributed.)


Update: Using rev-parse was really useful, and I got something like this:

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

72ce5f3e13c61f76fde5c58cefc85eed91b6f1f8

And with that magic number it is later possible to do:

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

And I am back where I was.


Update: I think that if I take some parts from that scripts VonC provided and put them into my buildfile I will get the result I was looking for.


Update:

A note on "git describe". You need a real tag (tag -a) earlier in you branch history to make this work or you will get something like this.

fatal: cannot describe '72ce5f3e13c61f76fde5c58cefc85eed91b6f1f8'

The problem is also described in Git Tag Does the Wrong Thing by Default.

But please note that a checkout seems to work anyway, even though that was an error message.

git checkout 72ce5f3e13c61f76fde5c58cefc85eed91b6f1f8

The normal thing though seems to be that you create something like a "ver1.0" tag, and then if you continue to work you get something like this:

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

So when you use describe correctly it does work and may produce a more human-readable results, and it can be really useful as well.

1 Answer

0 votes
by (62.9k points)

For someone who is looking for remote and branch information.

git remote show origin

can make a script displaying "sn info"

# 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 "Please type the command 'git log' for viewing additional commits, or 'git show' for viewing each commit information."

else

echo "Not a git repository."

fi

popd >/dev/null

 

Which would produce something like:

== Remote URL: origin [email protected]:pk/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 = [email protected]:pk/my-project.git

fetch = refs/heads/*:refs/remotes/origin/*

[github]

user = pk

repo = my-project

== Most Recent Commit

commit b47dce8b4102faf1cedc8aa3554cb58d76e0cbc1

Author: Prabhpreet Kaur

Date: Wed Jun 11 17:00:33 2008 -0600

 

Added changes to database schema that may permit decentralization from content pointers table

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

Browse Categories

...