在某个项目中,某些文件包含^ M作为换行符分隔符.分散这些文件显然是不可能的,因为git-diff认为它是整个文件只是一行.
如何与之前的版本区别开来?
有没有像"在分辨时将^ M视为换行符"的选项?
prompt> git-diff "HEAD^" -- MyFile.as
diff --git a/myproject/MyFile.as b/myproject/MyFile.as
index be78321..a393ba3 100644
--- a/myproject/MyFile.cpp
+++ b/myproject/MyFile.cpp
@@ -1 +1 @@
-<U+FEFF>import flash.events.MouseEvent;^Mimport mx.controls.*;^Mimport mx.utils.Delegate
\ No newline at end of file
+<U+FEFF>import flash.events.MouseEvent;^Mimport mx.controls.*;^Mimport mx.utils.Delegate
\ No newline at end of file
prompt>
Run Code Online (Sandbox Code Playgroud)
更新:
现在我编写了一个脚本,检查最新的10个版本并将CR转换为LF.
require 'fileutils'
if ARGV.size != 3
puts "a git-path must be provided"
puts "a filename must be provided"
puts "a result-dir must be provided"
puts "example:"
puts "ruby gitcrdiff.rb project/dir1/dir2/dir3/ …Run Code Online (Sandbox Code Playgroud) 如何使用补丁模式执行git add但忽略空格更改.
用例适用于您重新格式化文件并对其进行更改的情况.我想首先单独提交实际代码更改(如git diff -w path所示),然后将重新格式化提交为单独的提交.
我的项目的风格确实说要修剪拖尾的空白,但这会使差异非常非常混乱.在提交实际修复之前,我喜欢将它们合并到一个提交中.
这与仅添加非空格更改密切相关,但它要求完全相反:
有没有办法只将空白更改添加到暂存区域?
有没有一种简单的方法可以自动对任何只有空格更改的文件进行git checkout?我正在处理从Eclipse运行的Windows和一些代码生成,所以我得到了新行更改和空白更改,这些更改阻碍了我的工作流程中的噪音,并且难以跟踪实际更改.
即使只是一种很好的方式来报告哪些文件有真正的变化而哪些不是一个开始,而不是必须为每个文件做一个diff -w
是否有命令/选项/过滤器来丢弃所有修改后的文件的更改(通过结帐),这些文件的更改只影响空白?
或者,仅暂存具有非空白更改的文件(包括暂存其空格更改)将没有问题.
我想在他们自己的提交中提交我的所有空白更正,以保持其他一切纯净的空白更改.
使用类似的东西很容易过滤出空白差异git diff
git diff --ignore-all-space --ignore-space-change --ignore-space-at-eol --ignore-blank-lines
Run Code Online (Sandbox Code Playgroud)
但是如何获得只有空格差异的列表?
(得到一个只有空格差异的文件列表也很有用,所以我可以add把它们全部都git add -p解决掉,看看空白区别.但我想这是次要的.)
我们在Mercurial中进行合并时遇到了一个问题,其中空白更改导致合并冲突,这些冲突掩盖了我们可能遇到的任何"真实"冲突,并使合并成为一场噩梦.我们最近已经采用了一种格式化风格,它改变了某些分支中文件的缩进,因此合并几乎是不可能的.
例如,尝试:
hg init testrepo
cd testrepo/
echo "This is text." > newfile.txt
hg add newfile.txt
hg commit -m "Created a file."
hg branch newbranch
echo "This is some more text." > newfile.txt
hg commit -m "Changed text in the file."
hg update default
echo " This is text." > newfile.txt
hg commit -m "Added indentation whitespace."
Run Code Online (Sandbox Code Playgroud)
这导致两个分支,一个具有空白更改,另一个具有文本更改:
@ 2 " This is text".
|
|
| o 1 "This is some more text."
|/
|
o 0 "This is …Run Code Online (Sandbox Code Playgroud) 我们可以使用一些忽略空格的方法来做比较:
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#全空格忽略
我们能做的
git apply --ignore-whitespace\ git apply --ignore-space-change#应用补丁时忽略白蜡
但是,如何排除具有空格变化的文件git add *呢?
这些解决方案不适用于我:
1)
git diff -w --no-color | git apply --cached --ignore-whitespace
Run Code Online (Sandbox Code Playgroud)
-有时会写入错误,并且不会添加新文件进行跟踪。
2)
git add `git diff -w --ignore-submodules |grep "^[+][+][+]" |cut -c7-`
Run Code Online (Sandbox Code Playgroud)
-它会写错误并且什么也不做(可能是因为我有二进制文件,而不仅仅是文本文件)
PS:也许有办法用最后一次提交的文件替换文件(文件末尾有行空格,EOF之前有空格)。