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"

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值