Подтвердить что ты не робот

Git альтернативы "svn info", которые могут быть включены в сборку для отслеживания?

Я ищу Git альтернативы "SVN Info".

Сегодня я добавил некоторую информацию, которую Subversion предоставляет мне с помощью команды "svn info" прямо в мою сборку, и затем она помещается в исходный файл, который печатает это во время запуска. Таким образом, я всегда знаю, откуда взялась эта сборка и как ее вернуть.

Если у вас есть "svn info", такая как URL, корень репозитория, UUID репозитория и версия, у вас есть хорошая связь между тем, что развернуто, и системой сборки. И если кто-то сообщает об ошибке, вы знаете, откуда появилось это программное обеспечение, и поскольку эта информация была автоматически включена, риск человеческой ошибки меньше.

Теперь вопрос в том, какую информацию мне нужно получить от Git, чтобы я мог позже определить, откуда появилась эта сборка? И как я могу использовать эту информацию, чтобы вернуться именно к этой версии?

(Может быть, мне нужно добавить некоторую информацию о "сборке компьютера", так как Git распространяется.)


Обновление: использование rev-parse было действительно полезным, и я получил что-то вроде этого:

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

И с этим магическим числом позже можно сделать:

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

И я вернулся туда, где был.


Обновление: я думаю, что если я возьму некоторые части из этих сценариев, предоставленных VonC, и вставлю их в свой сборочный файл, я получу результат, который искал.


Обновление:

Заметка о "git description". Вам нужен реальный тег (tag -a) ранее в истории веток, чтобы это сработало, или вы получите что-то подобное.

fatal: cannot describe '72ce5f3e13c61f76fde5c58cefc85eed91b6f1f8'

Эта проблема также описана в " Git Tag по-умолчанию".

Но учтите, что оформление заказа все равно работает, хотя это было сообщение об ошибке.

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

Таким образом, если вы используете "Правильное describe правильно, оно работает и может привести к более читабельным результатам, а также может быть действительно полезным.

4b9b3361

Ответ 1

Чтобы закончить Чарльз, вы также можете сделать script отображение информации "sn info" как информацию, например этот (уже упомянутый там)

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

Что бы вызвало что-то вроде:

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

Ответ 2

Я знаю, что ответ уже принят, но это может помочь кому-то, кто ищет информацию о удаленной и ветки.

 git remote show origin

Ответ 3

В git идентификатор фиксации уникален в проекте даже через распределенный код. Вы также можете проверить идентификатор фиксации, поэтому, если вам нужен идентификатор, который позволит вам вернуться к состоянию кода, который сгенерировал сборку, вам просто нужен идентификатор фиксации.

git rev-parse HEAD

Конечно, вы, вероятно, хотите быть уверенным, что в рабочем дереве или индексе нет ожидающих изменений, поэтому вы можете проверить, нет ли вывода для чего-то вроде этого:

git diff --name-status HEAD

или просто используйте код выхода:

git diff --quiet HEAD

Единственными вещами, которые вы, возможно, захотите записать о машине сборки, являются экологические факторы, такие как версии цепочки инструментов и то, в каком состоянии были задействованы любые инструменты, которые не пришли из репозитория.

Если у вас есть центральный мастер-репозиторий, вы можете записать URL-адрес этого, хотя, поскольку идентификатор фиксации уникален для всех клонов проекта, это не критическая информация для идентификации фиксации.

Ответ 4

Вы можете получить удаленную информацию, как мы получаем в 'svn info':

git remote -v

Ответ 5

git describe

- это все, что вам нужно. Просто убедитесь, что вы создали хотя бы один (правильный) тег.

Ответ 6

Я не знаю, хочу ли это того, чего вы хотите, но если вы хотите встраивать какую-то информацию о версии во время сборки, помечайте свои точечные релизы и посмотрите, как это делает сам w20 > (ядро Linux использует тот же механизм) с помощью Makefile и GIT-VERSION-GEN script (обе ссылки относятся к gitweb на repo.or.cz).

GIT -VERSION-GEN в свою очередь использует git-describe.

Ответ 7

Здесь gitinfo.ps1 (или Get-GitInfo.ps1 для пуристов), версия PowerShell оболочки Duane Johnson script:

# From http://stackoverflow.com/a/924657/990504
# Duane Johnson 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

Ответ 8

Вы также можете создать псевдоним в git.

git config --global alias.info 'rev-parse HEAD'

Тогда вы можете же команду в Git,

git info