0


git rev-parse之操作笔记

git rev-parse:将各种引用表示法转换为哈希值等 1,git log显示日志

myroot@myroot:~/linux/linux-5.15.7$ git log
commit ea79e49b21ae8706dfbe5e2f13a766b5b10ac9db (HEAD -> master)
Author: xxxxx(email)
Date: Sat Mar 19 19:29:29 2022 +0800

linux-5.15.7

2,git status显示修改状态

myroot@myroot:~/linux/linux-5.15.7$ git status
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)

modified:   arch/x86/kernel/setup.c

no changes added to commit (use "git add" and/or "git commit -a")

3,git rev-parse --verify --short HEAD:获取最新commit id的简短结果

myroot@myroot:~/linux/linux-5.15.7$ git rev-parse --verify --short HEAD
ea79e49b2

4,git rev-parse --show-cdup: 显示从当前目录后退到工作区的根的深度

myroot@myroot:/linux/linux-5.15.7$ git rev-parse --show-cdup
结果是空
myroot@myroot:
/linux/linux-5.15.7/include/config$ git rev-parse --show-cdup
../../

5,git rev-parse --verify HEAD:

myroot@myroot:~/linux/linux-5.15.7$ git rev-parse --verify HEAD
ea79e49b21ae8706dfbe5e2f13a766b5b10ac9db

6,git describe:

myroot@myroot:~/linux/linux-5.15.7$ git describe --exact-match
fatal: No names found, cannot describe anything.

myroot@myroot:~/linux/linux-5.15.7$ git describe
fatal: No names found, cannot describe anything.

7,git --no-optional-locks status -uno --porcelain:

myroot@myroot:~/linux/linux-5.15.7$ git --no-optional-locks status -uno --porcelain
M arch/x86/kernel/setup.c

8,git diff-index:Compare a tree to the working tree or index

myroot@myroot:~/linux/linux-5.15.7$ git diff-index --name-only HEAD
arch/x86/kernel/setup.c

9,git rev-parse --git-dir:显示版本库.git目录所在位置

myroot@myroot:~/linux/linux-5.15.7$ git rev-parse --git-dir
.git

10,git rev-parse --show-toplevel:显示工作区根目录

myroot@myroot:~/linux/linux-5.15.7$ git rev-parse --show-toplevel
/home/myroot/linux/linux-5.15.7

11,git rev-parse --show-prefix:所在目录相对于工作区根目录的相对目录

myroot@myroot:/linux/linux-5.15.7$ git rev-parse --show-prefix
结果是空
myroot@myroot:
/linux/linux-5.15.7/include/config$ git rev-parse --show-prefix
include/config/

附:linux-5.15.7/scripts/setlocalversion

#!/bin/sh

SPDX-License-Identifier: GPL-2.0

This scripts adds local version information from the version

control systems git, mercurial (hg) and subversion (svn).

If something goes wrong, send a mail the kernel build mailinglist

(see MAINTAINERS) and CC Nico Schottelius

<nico-linuxsetlocalversion -at- schottelius.org>.

usage() {
echo "Usage: $0 [--save-scmversion] [srctree]" >&2
exit 1
}

scm_only=false
srctree=.
if test "$1" = "--save-scmversion"; then
scm_only=true
shift
fi
if test $# -gt 0; then
srctree=$1
shift
fi
if test $# -gt 0 -o ! -d "$srctree"; then
usage
fi

scm_version()
{
local short
short=false

    cd "$srctree"
     if test -e .scmversion; then
             cat .scmversion
             return
     fi
     if test "$1" = "--short"; then
             short=true
     fi

    # Check for git and a git repo.
     if test -z "$(git rev-parse --show-cdup 2>/dev/null)" &&
         head=$(git rev-parse --verify HEAD 2>/dev/null); then

            # If we are at a tagged commit (like "v2.6.30-rc6"), we ignore
             # it, because this version is defined in the top level Makefile.
             if [ -z "$(git describe --exact-match 2>/dev/null)" ]; then

                    # If only the short version is requested, don't bother
                     # running further git commands
                     if $short; then
                             echo "+"
                             return
                     fi
                     # If we are past a tagged commit (like
                     # "v2.6.30-rc5-302-g72357d5"), we pretty print it.
                     if atag="$(git describe 2>/dev/null)"; then
                             echo "$atag" | awk -F- '{printf("-%05d", $(NF-1))}'
                     fi

                    # Add -g and exactly 12 hex chars.
                     printf '%s%s' -g "$(echo $head | cut -c1-12)"
             fi

            # Check for uncommitted changes.
             # This script must avoid any write attempt to the source tree,
             # which might be read-only.
             # You cannot use 'git describe --dirty' because it tries to
             # create .git/index.lock .
             # First, with git-status, but --no-optional-locks is only
             # supported in git >= 2.14, so fall back to git-diff-index if
             # it fails. Note that git-diff-index does not refresh the
             # index, so it may give misleading results. See
             # git-update-index(1), git-diff-index(1), and git-status(1).
             if {
                     git --no-optional-locks status -uno --porcelain 2>/dev/null ||
                     git diff-index --name-only HEAD
             } | read dummy; then
                     printf '%s' -dirty
             fi
     fi

}

collect_files()
{
local file res=

    for file; do
             case "$file" in
             *\~*)
                     continue
                     ;;
             esac
             if test -e "$file"; then
                     res="$res$(cat "$file")"
             fi
     done
     echo "$res"

}

if $scm_only; then
if test ! -e .scmversion; then
res=$(scm_version)
echo "$res" >.scmversion
fi
exit
fi

if test -e include/config/auto.conf; then
. include/config/auto.conf
else
echo "Error: kernelrelease not valid - run 'make prepare' to update it" >&2
exit 1
fi

localversion* files in the build and source directory

res="$(collect_files localversion*)"
if test ! "$srctree" -ef .; then
res="$res$(collect_files "$srctree"/localversion*)"
fi

CONFIG_LOCALVERSION and LOCALVERSION (if set)

res="${res}${CONFIG_LOCALVERSION}${LOCALVERSION}"

scm version string if not at a tagged commit

if test "$CONFIG_LOCALVERSION_AUTO" = "y"; then
# full scm version string
res="$res$(scm_version)"
elif [ "${LOCALVERSION+set}" != "set" ]; then
# If the variable LOCALVERSION is not set, append a plus
# sign if the repository is not in a clean annotated or
# signed tagged state (as git describe only looks at signed
# or annotated tags - git tag -a/-s).
#
# If the variable LOCALVERSION is set (including being set
# to an empty string), we don't want to append a plus sign.
scm=$(scm_version --short)
res="$res${scm:++}"
fi

echo "$res"

标签: git

本文转载自: https://blog.csdn.net/u013416923/article/details/123672001
版权归原作者 IT笔记 所有, 如有侵权,请联系我们删除。

“git rev-parse之操作笔记”的评论:

还没有评论