相关疑难解决方法(0)

git pre-commit hook 同时格式化和重新添加文件

在允许用户提交之前,我们目前正在使用 git hook(如下)在我们的源代码上运行 astyle。这有一个警告,即用户必须提交,格式化他们的代码,然后再次提交,这有点麻烦。理想情况下,我们希望钩子格式化代码,然后将格式化的代码包含在原始提交中。我试过重新添加更改的文件,但它会导致引用错误(显然)。我还尝试在 pre-commit 挂钩中获取历史记录,并尝试退出挂钩并重新运行 git commit 命令,但没有成功。

# Run astyle on changed .cs files, ignoring $ignored
res=$(exec git diff --cached --name-only | \
    grep -Ev $ignored | \
    xargs astyle --options=conf/astylerc | \
    tail -n 1)
num_formatted=$(echo $res | cut -b 1) # We are only interested in the number preceeding 'formatted'.
[[ $num_formatted -ne 0 ]] && echo "WARNING: Code has been automatically formatted. Please re-add and re-commit" && exit 1 || echo "No code to format! …
Run Code Online (Sandbox Code Playgroud)

git formatting githooks

9
推荐指数
2
解决办法
5934
查看次数

Git直接修改索引的内容,用于预提交格式化挂钩

我想在将文件添加到Git索引之前自动格式化我的文件.现在,我有一个预提交钩子,看起来像这样:

#!/bin/bash

set -e
exec 1>&2

workingext="working.$$"
ext="bak.$$"
git diff -z --cached --name-only | egrep -z '\.(pl|pm|t)$' | \
        while read -d'' -r f; do
    # First modify the file in the index
    mv "$f" "$f.$workingext"
    git show :"$f" > "$f"
    perl -c "$f"
    perltidy -pbp -nst -b -bext="$ext" "$f";
    rm -f "$f.$ext"
    git add "$f"
    mv "$f.$workingext" "$f"
    # Then the working copy
    perl -c "$f"
    perltidy -pbp -nst -b -bext="$ext" "$f";
    rm -f "$f.$ext"
done
Run Code Online (Sandbox Code Playgroud)

基本上,我备份工作副本,检查索引副本,格式化它们,将它们添加到索引,然后还原工作副本并格式化它们,以便工作副本和索引副本之间的差异也不会增长大.我首先检查文件的语法,perl -c …

git code-formatting githooks

3
推荐指数
1
解决办法
1144
查看次数

标签 统计

git ×2

githooks ×2

code-formatting ×1

formatting ×1