【问题标题】:Check git status in pre-commit hook shell script在预提交钩子 shell 脚本中检查 git 状态
【发布时间】:2012-06-22 01:43:10
【问题描述】:

我正在编写一个 Git 预提交钩子客户端脚本,我想过滤已提交的文件并对已删除的文件做一些事情。

我发现通过以下内容,我可以使用以下内容遍历提交中包含的所有文件。

#!/bin/sh

for file in $( exec git diff-index --cached --name-only HEAD )
  do
    echo $file
done

要查找已删除的文件,我相信我可以使用git status --porcelain <file>,因为当文件被删除时,它会将第一个字符显示为D

所以我需要帮助制定语法来检查git status --porcelain <file> 输出中的第一个字符是否是D

#!/bin/sh

for file in $( exec git diff-index --cached --name-only HEAD )
  do
    # This line doesn't work but it's the best I've came up with.
    if git status --porcelain $lessFile == *"D"*; then
      echo "$file was deleted"
    fi
done

或者让我知道我是否离开这里。谢谢。

【问题讨论】:

    标签: linux git bash shell


    【解决方案1】:

    试试

     $( exec git status --porcelain | egrep "^D" | sed -e 's/^D  //' )
    

    文件名可能有空格问题。或更好

    git diff-index --cached --name-status HEAD | awk '$1 == "D" { print $2 }' | while read file
    do
       echo $file
    done
    

    另见this question

    【讨论】:

    • 感谢您的回复。您介意在您的示例中包含完整的上下文吗?对 shell 脚本一无所知,我很难将这些部分组合在一起。
    • 只使用第二个。它是完整的和完整的
    • 太棒了,我第一次尝试时复制错了。感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 2018-07-22
    • 2013-12-15
    • 1970-01-01
    • 2016-04-02
    • 2019-07-12
    • 2015-01-13
    • 2018-05-21
    相关资源
    最近更新 更多