如何git-only只添加非空格更改和新文件?

时间:2014-07-30 18:48:10

标签: git whitespace gitignore ignore removing-whitespace

  1. 我们可以使用某些类型的忽略空格来做差异:

    1)git diff --ignore-space-at-eol#忽略EOL中的空白变化。

    2)git diff --ignore-space-change / git diff -b#忽略空白量的变化。

    3)git diff --ignore-all-space / git diff -w#全空白忽略

  2. 我们可以做到

    git apply --ignore-whitespace \ git apply --ignore-space-change#在应用补丁时忽略whitesapces

  3. 但是如何排除空格的文件从git add *改变?

    这些解决方案对我不起作用:

    1)

     git diff -w --no-color | git apply --cached --ignore-whitespace
    

    - 它有时会写入错误,并且不会将新文件添加到跟踪中。

    2)

     git add `git diff -w --ignore-submodules |grep "^[+][+][+]" |cut -c7-`
    

    - 它写错误并且什么也不做(可能是因为我有二进制文件,而不仅仅是文本文件)

    P.S。:也许有办法用最后一次提交的文件替换文件(在EOF差异之前的末尾或空格和空格的空格差异)?

2 个答案:

答案 0 :(得分:0)

这个问题的唯一真正解决方案是。

解决方案是使用特殊设置重新创建git存储库,然后从原始提交从一个结帐状态复制到此存储库。

来源不良存储库:

  

/家庭/用户/的TruePower

新的良好存储库:

  

/家庭/用户/ onepower

cd /home/user
rm -rf ./onepower
mkdir ./onepower
cd ./onepower
git init

# set style of lineendings to be autoconverted to Linux/Unix LF
#git config core.autocrlf true # uncomment this if you prefer Windows CRLF style
git config core.autocrlf input # comment this if you prefer Windows CRLF style

# set trailing whitespace (and other similar) to ignore
git config core.whitespace \
trailing-space,space-before-tab,indent-with-non-tab

# you can use git config --global ... if you want global settings changing.

cd ../truepower
git log
  

提交cccc

     

提交bbbb

     

提交aaaa

cd ../truepower
git checkout aaaa
cd ../onepower
rm -rf ./*
cp -a ../truepower/* ./
git add -A
git commit -m "fixed aaaa"

cd ../truepower
git checkout bbbb
cd ../onepower
rm -rf ./*
cp -a ../truepower/* ./
git add -A
git commit -m "fixed bbbb"

cd ../truepower
git checkout cccc
cd ../onepower
rm -rf ./*
cp -a ../truepower/* ./
git add -A
git commit -m "fixed cccc"

现在你可以删除旧的错误../truepower并使用新的../onepower git存储库。

顺便说一句,在此之后,您将不会遇到此存储库的问题,文件末尾的空格更改,字符串的末尾,部分位于字符串的开头。但当然,字符串中间的空格变化将被解释为变化。

http://git-scm.com/book/en/Customizing-Git-Git-Configuration#Formatting-and-Whitespace

的帮助下找到解决方案

答案 1 :(得分:0)

将以下内容添加到.gitconfig

  1. Add only new files

    adduntracked=!git add $(git ls-files -o --exclude-standard)

  2. Add only non-whitespace changes

    addnows = !git diff -U0 -w --no-color -- \"$@\" | git apply --cached --ignore-whitespace --unidiff-zero "#"

  3. 两者在一起:

    addnewnows=!git add $(git ls-files -o --exclude-standard) && git diff -U0 -w --no-color -- \"$@\" | git apply --cached --ignore-whitespace --unidiff-zero "#"