如何在Git中提交之前修补所有更改的文件
在提交更改的文件之前,我需要删除所有尾随空格。问题是如何做到这一点?Git在默认情况下会警告尾随空格,并且可以配置为拒绝添加空格错误的提交 删除空白只能通过更改文件和重做如何在Git中提交之前修补所有更改的文件,git,Git,在提交更改的文件之前,我需要删除所有尾随空格。问题是如何做到这一点?Git在默认情况下会警告尾随空格,并且可以配置为拒绝添加空格错误的提交 删除空白只能通过更改文件和重做git add阶段来实现——虽然可以在添加时自动执行此操作,但这会留下一个与所暂存的不同的工作树,因此文件在git status输出中仍然显示为“已更改但未更新” 删除尾随空格的最简单方法是 sed -i -e 's/[:blank:]*$//' file.c ... 我不认为有一种好方法可以在提交时自动删除尾随空格(如果可以
git add
阶段来实现——虽然可以在添加时自动执行此操作,但这会留下一个与所暂存的不同的工作树,因此文件在git status
输出中仍然显示为“已更改但未更新”
删除尾随空格的最简单方法是
sed -i -e 's/[:blank:]*$//' file.c ...
我不认为有一种好方法可以在提交时自动删除尾随空格(如果可以的话,我也不认为这样做是个好主意) 我以前使用过一个钩子来拒绝添加尾随空格的提交,这对我来说很好;创建/添加以下内容到
.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 --
最终,我决定为此编写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
在适当的时候考虑接受你的一些问题的答案。您可以通过单击每个问题正确答案旁边的复选标记来完成此操作。