zoukankan      html  css  js  c++  java
  • git提交待审核代码,报错没有change-id的解决方法

    git提交是报错没有change-id的解决方法:

      1.先仔细查看报错内容,查出是哪天提交记录缺少change-id   

     2.如果是最近的一条缺少,则直接执行git commit --amend "提交信息",以对上次提交的内容进行修改;

    有时可能需要先执行:

    gitdir=$(git rev-parse --git-dir); scp -p -P 29418 zhihao.yu@szrd.phiwifi.com:hooks/commit-msg ${gitdir}/hooks/

    创建 hooks/commit-msg 这个文件,再执行git commit --amend   按:wq 保存提交信息, 最后git push origin HEAD:refs/for/develop

    如果是前面几条都缺少change-id,则先 git reset --soft ****ddfd(恢复到最近一次有change-id的提交记录),重新提交$ git commit -am "提交信息" 重新提交修改记录 

    3.执行git push origin HEAD:refs/for/develop

    注意:git bash执行必须在.git文件同级目录中

    注意:手动解决

    如果执行  gitdir=$(git rev-parse --git-dir); scp -p -P 29418 zhihao.yu@szrd.phiwifi.com:hooks/commit-msg ${gitdir}/hooks/

    报错:Either -f or -t option should be set  仍然未生成commit-msg文件,则需要手动添加commit-msg文件

    执行git commit --amend,在title下面空出一行后,将错误提示中的change-id复制到Message中。再push。注意,一定要空出一行,否则Git会把其作为title的一部分处理

    利用commit-msg hook自动生成change-id

    将如下的的hook脚本复制到Git项目中.git/hooks下,并命名为“commit-msg”。一般情况 .git/hooks 下会包含一个叫“commit-msg.sample”的文件,可以把它删除。添加完成后,执行chmod u+x .git/hooks/commit-msg保证hook可执行。

    commit-msg hook脚本,将下面代码复制到Git项目中.git/hooks下,并命名为“commit-msg”

    #!/bin/sh
    # From Gerrit Code Review 2.6
    #
    # Part of Gerrit Code Review (http://code.google.com/p/gerrit/)
    #
    # Copyright (C) 2009 The Android Open Source Project
    #
    # Licensed under the Apache License, Version 2.0 (the "License");
    # you may not use this file except in compliance with the License.
    # You may obtain a copy of the License at
    #
    # http://www.apache.org/licenses/LICENSE-2.0
    #
    # Unless required by applicable law or agreed to in writing, software
    # distributed under the License is distributed on an "AS IS" BASIS,
    # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    # See the License for the specific language governing permissions and
    # limitations under the License.
    #
    
    unset GREP_OPTIONS
    
    CHANGE_ID_AFTER="Bug|Issue"
    MSG="$1"
    
    # Check for, and add if missing, a unique Change-Id
    #
    add_ChangeId() {
    clean_message=`sed -e '
    /^diff --git a/.*/{
    s///
    q
    }
    /^Signed-off-by:/d
    /^#/d
    ' "$MSG" | git stripspace`
    if test -z "$clean_message"
    then
    return
    fi
    
    # Does Change-Id: already exist? if so, exit (no change).
    if grep -i '^Change-Id:' "$MSG" >/dev/null
    then
    return
    fi
    
    id=`_gen_ChangeId`
    T="$MSG.tmp.$$"
    AWK=awk
    if [ -x /usr/xpg4/bin/awk ]; then
    # Solaris AWK is just too broken
    AWK=/usr/xpg4/bin/awk
    fi
    
    # How this works:
    # - parse the commit message as (textLine+ blankLine*)*
    # - assume textLine+ to be a footer until proven otherwise
    # - exception: the first block is not footer (as it is the title)
    # - read textLine+ into a variable
    # - then count blankLines
    # - once the next textLine appears, print textLine+ blankLine* as these
    # aren't footer
    # - in END, the last textLine+ block is available for footer parsing
    $AWK '
    BEGIN {
    # while we start with the assumption that textLine+
    # is a footer, the first block is not.
    isFooter = 0
    footerComment = 0
    blankLines = 0
    }
    
    # Skip lines starting with "#" without any spaces before it.
    /^#/ { next }
    
    # Skip the line starting with the diff command and everything after it,
    # up to the end of the file, assuming it is only patch data.
    # If more than one line before the diff was empty, strip all but one.
    /^diff --git a/ {
    blankLines = 0
    while (getline) { }
    next
    }
    
    # Count blank lines outside footer comments
    /^$/ && (footerComment == 0) {
    blankLines++
    next
    }
    
    # Catch footer comment
    /^[[a-zA-Z0-9-]+:/ && (isFooter == 1) {
    footerComment = 1
    }
    
    /]$/ && (footerComment == 1) {
    footerComment = 2
    }
    
    # We have a non-blank line after blank lines. Handle this.
    (blankLines > 0) {
    print lines
    for (i = 0; i < blankLines; i++) {
    print ""
    }
    
    lines = ""
    blankLines = 0
    isFooter = 1
    footerComment = 0
    }
    
    # Detect that the current block is not the footer
    (footerComment == 0) && (!/^[?[a-zA-Z0-9-]+:/ || /^[a-zA-Z0-9-]+:///) {
    isFooter = 0
    }
    
    {
    # We need this information about the current last comment line
    if (footerComment == 2) {
    footerComment = 0
    }
    if (lines != "") {
    lines = lines "
    ";
    }
    lines = lines $0
    }
    
    # Footer handling:
    # If the last block is considered a footer, splice in the Change-Id at the
    # right place.
    # Look for the right place to inject Change-Id by considering
    # CHANGE_ID_AFTER. Keys listed in it (case insensitive) come first,
    # then Change-Id, then everything else (eg. Signed-off-by:).
    #
    # Otherwise just print the last block, a new line and the Change-Id as a
    # block of its own.
    END {
    unprinted = 1
    if (isFooter == 0) {
    print lines "
    "
    lines = ""
    }
    changeIdAfter = "^(" tolower("'"$CHANGE_ID_AFTER"'") "):"
    numlines = split(lines, footer, "
    ")
    for (line = 1; line <= numlines; line++) {
    if (unprinted && match(tolower(footer[line]), changeIdAfter) != 1) {
    unprinted = 0
    print "Change-Id: I'"$id"'"
    }
    print footer[line]
    }
    if (unprinted) {
    print "Change-Id: I'"$id"'"
    }
    }' "$MSG" > "$T" && mv "$T" "$MSG" || rm -f "$T"
    }
    _gen_ChangeIdInput() {
    echo "tree `git write-tree`"
    if parent=`git rev-parse "HEAD^0" 2>/dev/null`
    then
    echo "parent $parent"
    fi
    echo "author `git var GIT_AUTHOR_IDENT`"
    echo "committer `git var GIT_COMMITTER_IDENT`"
    echo
    printf '%s' "$clean_message"
    }
    _gen_ChangeId() {
    _gen_ChangeIdInput |
    git hash-object -t commit --stdin
    }
    
    add_ChangeId
     

    详细解决办法:http://www.360doc.com/content/17/0615/18/10058718_663429286.shtml

  • 相关阅读:
    移除HTML5 input在type="number"时的上下小箭头
    JQUERY 实现加入收藏夹功能
    发现移动端在uc浏览器上会放大bug,解决此bug的方法!
    HTML 定时页面跳转
    Some Commands I Used Frequently
    Some Life Tricks I Noticed
    几种工厂模式的区别
    大型DELETE(删除大量数据)的一种解决方案
    笔记-Microsoft SQL Server 2008技术内幕:T-SQL语言基础-10 可编程对象
    笔记-Microsoft SQL Server 2008技术内幕:T-SQL语言基础-09 事务和并发
  • 原文地址:https://www.cnblogs.com/yzhihao/p/8392704.html
Copyright © 2011-2022 走看看