2009-05-29 1 views
43

私はgitの代わりに "svn info"を探しています。gitの代わりに "svn info"を使用して、トレーサビリティのためにビルドに含めることができますか?

今日私はSubVersionが私のビルドに「svn info」コマンドを与えてくれたという情報を追加して、それを起動時に印刷するソースファイルにプッシュします。 そのように私はいつもそのビルドがどこから来たのか、それを元に戻す方法を知っています。

URL、リポジトリルート、リポジトリUUID、リビジョンのような「svn info」がある場合は、デプロイされているものとビルドシステムの間に良好なリンクがあります。 誰かがバグを報告した場合、そのソフトウェアがどこから来たのか知っています。 この情報は自動的に含まれているため、人為的なエラーのリスクは小さくなります。

ここで問題となるのは、gitからどのような情報を取得する必要があるのか​​、後でそのビルドの由来を特定できるかどうかです。 その情報を使ってそのバージョンに正確に戻すにはどうすればよいですか? REV-解析を使用して た:

(たぶん私は、同様のgitが配布されるので、 "コンピュータを構築" に関するいくつかの情報を追加する必要があります。)

おかげ ヨハン


更新本当に役に立った、私はこのような何かを得た:

[email protected]:~/git_test$ git rev-parse HEAD 
72ce5f3e13c61f76fde5c58cefc85eed91b6f1f8 

それとmそれ以降は可能です。

[email protected]:~/git_test$ git checkout 72ce5f3e13c61f76fde5c58cefc85eed91b6f1f8 

私はどこにいたのですか。


更新: 私は、スクリプトVonCが提供したことから、いくつかの部分を取り、私のビルドファイルにそれらを置く場合、私は私が探していた結果を得るだろうと思います。


更新:「gitの記述」に ノート、あなたはこの仕事をするためにか、あなたはこのような何かを得るでしょう、以前のあなたブランチの歴史の中で本当のタグ(タグ-a)が必要です。

fatal: cannot describe '72ce5f3e13c61f76fde5c58cefc85eed91b6f1f8' 

問題もここhttp://www.rockstarprogrammer.org/post/2008/oct/16/git-tag-does-wrong-thing-default/

記述されているしかし、たとえあなたのエラーメッセージだったこと、チェックアウトはとにかく働くように見えることに注意してください。

git checkout 72ce5f3e13c61f76fde5c58cefc85eed91b6f1f8 

あなたは、あなたが「ver1.0」タグ、 のようなものを作成し、あなたが作業を続ける場合は、このような何かを得ることであると思われる通常の事:だから

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

あなたはそれが正しく機能し、より多くの人が読むことができる を生成する可能性があり、本当に便利なこともあります。

おかげ ヨハン

のgitで
+0

@Johan:私は以下の言及スクリプトは非常におしゃべりし、「SVN情報」コマンドのいくつかを模倣するように設計されています。それはより簡潔なバージョンにそれをトリミングすることは常に可能です。 – VonC

+0

@VonC:そこには有効なポイントがあります。 – Johan

答えて

26

チャールズの答えを完了するには、あなたも(すでにmentioned therethis oneのように、

ような何か生み出す
#!/bin/bash 

# author: Duane Johnson 
# email: [email protected] 
# 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 

情報などの "SN情報" を表示するスクリプトを作成することができます

== Remote URL: origin [email protected]:canadaduane/my-project.git 
== Remote Branches: 
    origin/work 
    trunk 
    [email protected] 
    [email protected] 
    [email protected] 

== 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]:canadaduane/my-project.git 
    fetch = refs/heads/*:refs/remotes/origin/* 
[github] 
    user = canadaduane 
    repo = my-project 

== Most Recent Commit 
commit b47dce8b4102faf1cedc8aa3554cb58d76e0cbc1 
Author: Duane Johnson <[email protected]> 
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. 
+1

これは非常におしゃれですが、この小さなスクリプトには多くの有益な情報があるようです;) – Johan

+0

@Johan:上記のスクリプトはかなりおしゃべりで、 "svn info"コマンドのいくつかを模倣するように設計されています。それはより簡潔なバージョンにそれをトリミングすることは常に可能です。 – VonC

7

、コミットIDがさえ分散形コード全体のプロジェクト内で一意です。また、コミットIDをチェックアウトすることもできます。そのため、IDを必要とする場合は、ビルドを生成したコードの状態に戻ることができます。単にコミットIDが必要です。

git diff --name-status HEAD 

git rev-parse HEAD 

はもちろん、あなたはおそらく、あなたがこのような何かへの出力はありませんことを確認したい場合がありますので、作業ツリーやインデックス内の保留中の変更がないことを確認したいです

またはちょうどの終了コードを使用:あなたはビルドマシンについて記録したいかもしれない唯一のものは、このようなツールチェーンのバージョンなどの環境要因である

git diff --quiet HEAD 

をし、どのような状態の任意リポジトリから来ていないツールがありました。

中央マスタリポジトリを使用している場合は、そのURLを記録できますが、コミットIDはプロジェクトのすべてのクローンで一意であるため、コミット。

+2

良い点。+1 – VonC

3
git describe 

はすべて必要です。少なくとも1つの(適切な)タグが作成されていることを確認してください。

+1

また、Git自身とLinuxカーネルがGIT-VERSION-GENスクリプトを使用してそれをどのように使用するのかを見てみましょう。また、Makefileで@ VERSION @を変更するなどしてください。 1.6.0-rc2 –

+0

これはいくつかのユーザーアクションに依存するようです...エラーが発生しやすく、実際には役に立たないと思われますか?または私は何かが恋しいですか? – Johan

+0

私は何かが間違っていた、タグは... ...そのことに関する私の質問に更新を追加しました.... – Johan

3

ビルド時に何らかのバージョン情報を埋めたい場合は、ポイントリリースにタグを付けて、Git自体がどのように機能するかを見てください(Linuxカーネルは同じメカニズム)MakefileGIT-VERSION-GENスクリプト(両方のリンクはrepo.or.czでgitwebになります)を使用しています。

GIT-VERSION-GENは、git-describeを順番に使用します。

66

私は答えがすでに受け入れられていることを知っていますが、これは遠隔地や支店の情報を探している人を助けるかもしれません。

git remote show origin 
+1

この受け入れられた答えはあまりにも複雑です。これははるかに速く、 'svn info'と同等の情報を提供します。 – zmonteca

+6

'git remote -v'はもっと短くなります。 Gitは配布されているレポ情報はあなたが見ているものであり、何も表示されていません。リモートリポジトリに関する情報が必要な場合は、/ fetchからやり取りすることもあります。 'git remote'はあなたが望むものです。 '-v'はurlを表示します。 – gcb

6

あなたは私たちがによって 'svn infoを' を得るように、リモートの情報を取得することができます:

 
git remote -v 
0

ここgitinfo.ps1だ(あるいは純粋主義者のための-GitInfo.ps1を取得)、のPowerShellのバージョンデュアン・ジョンソンのシェルスクリプト:

# From http://stackoverflow.com/a/924657/990504 
# Duane Johnson's script translated to PowerShell by Jonathan Fischer 2015.04.25 

Push-Location . 

# Find base of git directory 
while ($true) 
{ 
    if (Test-Path -PathType container .git) 
    { 
    # Show various information about this git directory 
    Write-Output "== Remote URL: $(git remote -v)" 

    Write-Output "`n== Remote Branches: " 
    git branch -r 

    Write-Output "`n== Local Branches:" 
    git branch 

    Write-Output "`n== Configuration (.git/config)" 
    Get-Content .git/config 

    Write-Output "`n== Most Recent Commit" 
    git log --max-count=1 

    Write-Output "Type 'git log' for more commits, or 'git show' for full commit details." 
    break 
    } 

    # Try parent directory. 
    Set-Location .. 
    # Stop if at root of drive. 
    if ((Get-Location).Path -match "[A-Z]:\\$") 
    { 
    Write-Error "Not a Git repository." 
    break 
    } 
} 

# Note: even though the popd was not strictly necessary in the bash version 
# unless the script was sourced/dotted, PowerShell has the questionable behavior 
# where scripts modify the current directory (and environment!) of the calling 
# process. So we need the Pop-Location. 
Pop-Location 
関連する問題