修改pre-commit解决git中的 trailing whitespace问题-windows平台 white space pre wrap

git版本:1.7.3.1.msysgit.0

今天安装了windows平台下的git,但是commit的时候提示了一堆的trailing whitespace问题,打开文件后发现是写程序时再语句结束的后面多敲了几个空格或在文件

末端多了几个空行所致。但是那么多文件不可能手动一个个改吧。

后来再网上看到有一个论坛的帖子解决了这个问题,有两种方法:

1、临时解决办法

在commit的时候指定--no-verify选项,不让git去检查这类错误。同时git也不去检查其它错误了。

git commit --no-verify

2、永久解决

导致这个问题的原因是:在.githooks目录下的pre-commit文件中有如下的几条检查语句:

if (s/^+//) {

$lineno++;

chomp;

if (/s$/) {

bad_line("trailing whitespace", $_);

你可以将最后一句注释掉来永久避免弹出这个错误,但是我推荐大家还是利用命令将whitespace自动消除掉。这个文件中的命令我并不熟悉,不过在网上找到了用来消除trailing whitespace的shell脚本

#!/bin/sh

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

# Find files with trailing whitespace

for FILE in `exec git diff-index --check --cached $against -- | sed '/^[+-]/d' | sed -r 's/:[0-9]+:.*//' | uniq` ; do

# Fix them!

sed -i 's/[[:space:]]*$//' "$FILE"

done

exit

现在只要你把这段代码放到你的pre-commit文件中的合适位置就可以了。该文件的语法比较晦涩,起初不知道该怎么放,折腾了几次总算放对了,我在我的pre-commit文件中是这么放的(红色部分):

#!/bin/sh

#

# An example hook script to verify what is about to be committed.

# Called by git-commit with no arguments. The hook should

# exit with non-zero status after issuing an appropriate message if

# it wants to stop the commit.

#

# To enable this hook, make this file executable.

# This is slightly modified from Andrew Morton's Perfect Patch.

# Lines you introduce should not have trailing whitespace.

# Also check for an indentation that has SP before a TAB.

if git-rev-parse --verify HEAD 2>/dev/null

then

git-diff-index -p -M --cached HEAD --

else

# NEEDSWORK: we should produce a diff with an empty tree here

# if we want to do the same verification for the initial import.

:

fi |

# Find files with trailing whitespace

for FILE in `exec git diff-index --check --cached $against -- | sed '/^[+-]/d' | sed -r 's/:[0-9]+:.*//' | uniq` ; do

# Fix them!

sed -i 's/[[:space:]]*$//' "$FILE"

done

perl -e '

my $found_bad = 0;

my $filename;

my $reported_filename = "";

my $lineno;

sub bad_line {

my ($why, $line) = @_;

if (!$found_bad) {

print STDERR "*n";

print STDERR "* You have some suspicious patch lines:n";

print STDERR "*n";

$found_bad = 1;

}

if ($reported_filename ne $filename) {

print STDERR "* In $filenamen";

$reported_filename = $filename;

}

print STDERR "* $why (line $lineno)n";

print STDERR "$filename:$lineno:$linen";

}

while (<>) {

if (m|^diff --git a/(.*) b/1$|) {

$filename = $1;

next;

}

if (/^@@ -S+ +(d+)/) {

$lineno = $1 - 1;

next;

}

if (/^ /) {

$lineno++;

next;

}

if (s/^+//) {

$lineno++;

chomp;

if (/s$/) {

bad_line("trailing whitespace", $_);

}

if (/^s* t/) {

bad_line("indent SP followed by a TAB", $_);

}

if (/^([<>])1{6} |^={7}$/) {

bad_line("unresolved merge conflict", $_);

}

}

}

exit($found_bad);

'

对pre-commit感兴趣的可以去看看git的hook方面的东西。似乎类似于vc里面编译前或编译后指定要做的工作

  

爱华网本文地址 » http://www.413yy.cn/a/25101012/117072.html

更多阅读

解决Word中的页码变成{PAGE * MERGEFORMAT} mergeformat

解决Word中的页码变成{PAGE * MERGEFORMAT}——简介在 Word 文件中的页码变成了 {PAGE * MERGEFORMAT},该如何恢复原有的页码?问题的发生原因您设定到了【显示功能变数代码代替数值】的功能,此选项可在文件中显示功能变数代码,而非功

李剑芒:回答张维为演讲中的两个问题

司马南的推荐,网友的催促,使得我看了本来不太想浪费时间看的视频《张维为:中国信心》。演讲风度,言语安排都是上乘的水平。但演讲的语言逻辑就一塌糊涂了。我挑出他的很多错误论述中的两点论述,在此进行反驳。第一个论述,中国经济发展速

分镜头脚本写作中的几个问题 动画分镜头脚本

分镜头脚本写作中的几个问题一、镜头感问题  常见问题:很多考生的分镜头,用朴实的大白话讲出来,天南海北,心理活动,背景解释等等,简直就是一篇小小说,完全不是用镜头表现,无法看出考生的编导潜力和镜头感觉。  解决办法:所谓镜头,主要

赵秀富研究性文稿:年鉴写作中的几个问题

  这是我在江西南昌景德镇召开的中国有色金属工业年鉴工作会议上的讲课稿,提前发出来,一可方便参加会议的朋友下载,二让我的博友享受至尊待遇。  年鉴写作中的几个问题  赵秀富  2012年5月22日各位领导,各

声明:《修改pre-commit解决git中的 trailing whitespace问题-windows平台 white space pre wrap》为网友千纸鹤分享!如侵犯到您的合法权益请联系我们删除