如何在Git中提交之前修补所有已更改的文件

时间:2012-10-25 08:31:30

标签: git

我需要在提交更改的文件之前删除所有尾随空格。问题是如何做到这一点?

3 个答案:

答案 0 :(得分:1)

我不相信有一个很好的方法可以在提交时自动删除尾随空格(如果可以的话,我不相信这样做是个好主意。)

我之前使用了一个钩子来拒绝添加尾随空格的提交,这对我很有用;创建/添加以下内容到.git/hooks/pre-commit并使其可执行:

# Work out what to diff against
if git rev-parse --verify HEAD >/dev/null 2>&1
then
    against=HEAD
else
    # Initial commit: diff against an empty tree object
    against=4b825dc642cb6eb9a060e54bf8d69288fbee4904
fi

# If there are whitespace errors, print the offending file names and fail.
exec git diff-index --check --cached $against --

答案 1 :(得分:0)

Git默认警告尾随空格,并且可以配置为拒绝添加空格错误的提交。

删除空白只能通过更改文件和重做git-add阶段来实现 - 虽然可以在添加时自动执行此操作,但这会留下一个与分阶段不同的工作树,因此这些文件仍会在git-status输出中显示为“已更改但未更新”。

删除尾随空格的最简单方法是

sed -i -e 's/[:blank:]*$//' file.c ...

答案 2 :(得分:0)

好吧,最终我决定为此编写gitadd命令。

#!/bin/bash


# Number of arguments passed
argc=$#


if [ $argc -eq 0  ]; then
        argv=( $(git diff --name-only HEAD) )
else
        argv=( $@ )
fi

for file in "$argv"; do

        sed -i -e 's/^[[:blank:]]\+$//' $file

        git add $file # stage patched file

done