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
правильно, оно работает и может привести к более читабельным результатам, а также может быть действительно полезным.
Ответы
Ответ 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