52 votes

git alternatives à "svn info" qui peuvent être incluses dans une build pour la traçabilité?

Je suis à la recherche d'un git solutions de rechange "svn info".

Aujourd'hui, j'ai ajouter un peu d'info que la SubVersion me donne avec le "svn info de la commande" à droite dans mon build, et qui est ensuite poussé dans un fichier source qui imprime ce cours de démarrage. De cette façon, je sais toujours où que construire venus et comment le récupérer à nouveau.

Si vous avez un "svn info" comme URL, Racine du Référentiel, le Référentiel de l'UUID et de la Révision, vous avez un bon lien entre ce qui est déployé et le buildsystem. Et si quelqu'un signale un bug, vous savez où le logiciel est venu, et depuis que l'information a été automatiquement inclus le risque d'erreur humaine est plus petit.

Maintenant, la question est, quelles informations dois-je besoin pour obtenir à partir de git afin que je puisse identifier d'où qu'construire vient? Et comment puis-je utiliser cette information pour revenir à exactement cette version?

(Peut-être que j'ai besoin d'ajouter des informations relatives à l'ordinateur de génération" ainsi depuis git est distribué.)

Merci Johan


Mise à jour: À l'aide de rev-parse était vraiment utile, j'ai quelque chose comme ceci:

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

Et avec ce nombre magique il est ensuite possible de le faire

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

Et je suis de retour là où j'étais.


Mise à jour: Je pense que si je prends des pièces à partir de scripts VonC fournis et de les mettre dans mon buildfile je vais obtenir le résultat que je cherchais.


Mise à jour: Une note sur "git décrire", vous avez besoin d'une véritable balise (tag-a) plus tôt dans vous de l'histoire de la branche pour faire ce travail, ou vous obtiendrez quelque chose comme ceci.

fatal: cannot describe '72ce5f3e13c61f76fde5c58cefc85eed91b6f1f8'

Le problème est également décrite ici http://www.rockstarprogrammer.org/post/2008/oct/16/git-tag-does-wrong-thing-default/

Mais s'il vous plaît noter que la caisse semblent fonctionner de toute façon, même toi qui a un message d'erreur.

git checkout 72ce5f3e13c61f76fde5c58cefc85eed91b6f1f8

La chose normale tu semble que vous créez quelque chose comme un "ver1.0" tag, et puis si vous continuez à travailler, vous obtenez quelque chose comme ceci:

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

Ainsi, lorsque vous utilisez décrire correctement, il fonctionne et peut produire une plus lisible par les résultats, et peut être vraiment utile.

Merci Johan

78voto

Webghost Points 225

Je sais que la réponse est déjà acceptée, mais cela peut aider quelqu'un qui recherche des informations sur les sites distants et les succursales.

  git remote show origin
 

31voto

VonC Points 414372

Pour compléter la réponse de Charles, vous pouvez également créer un script affichant des informations "sn info" comme celle-ci (déjà mentionnée ici )

 #!/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
 

Ce qui produirait quelque chose comme:

 == 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.
 

9voto

Charles Bailey Points 244082

Dans git, la validation id est unique dans un projet, même à travers distibuted code. Vous pouvez aussi regarder un commit id, donc si vous voulez un identifiant que vous permettra de revenir à l'état du code qui a généré un build vous avez juste besoin de la validation d'identité.

git rev-parse HEAD

Bien sûr, vous voulez probablement pour être sûr qu'il n'y a pas toutes les modifications en attente dans l'arbre de travail ou d'un indice, de sorte que vous pourriez vouloir vérifier qu'il n'y a pas de sortie à quelque chose comme ceci:

git diff --name-status HEAD

ou tout simplement utiliser le code de sortie:

git diff --quiet HEAD

Les seules choses que vous pourriez voulez enregistrer sur la machine de compilation des facteurs environnementaux tels que l'outil de la chaîne d'versions, ainsi que l'état des outils qui ne sont pas venus à partir du référentiel ont été dans.

Si vous avez une centrale référentiel maître, vous pouvez enregistrer l'url de ce, bien que la commettre id est unique dans tous les clones du projet, il n'est pas essentiel de l'information pour l'identification de la commettre.

3voto

Dustin Points 35205
 git describe
 

est tout ce dont vous avez besoin. Assurez-vous simplement d'avoir créé au moins une (bonne) balise.

2voto

Jakub Narębski Points 87537

Je ne sais pas si c'est ce que vous voulez, mais si vous souhaitez intégrer une sorte de version info pendant la durée de la construction, de l'étiquette de votre point de rejet, et de prendre un coup d'oeil comment Git lui-même est-il (noyau Linux utilise le même mécanisme) à l'aide d' un Makefile et GIT-VERSION-GEN script (les deux liens sont à gitweb au repo.ou.cz).

GIT-VERSION-GEN, à son tour utilise git-décrire.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X