- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
根据这个答案,我无法理解 git diff-filter 的“复制”和“重命名”是什么意思:https://stackoverflow.com/a/6879568/2039203 .当我重命名/移动某个文件时,该文件被处理为“已添加”和“已删除”。
那么问题来了:我应该怎么做才能使用以下两个命令过滤一些文件?我是否需要此过滤器选项来获取添加/删除文件的列表?
git diff --diff-filter=C --name-only
和
git diff --diff-filter=R --name-only
最佳答案
git diff
如果文件通过了“相似性测试”,它将显示为“已重命名”的文件。为确保它正在发生,请指定 -M
选项(我将在下面这样做)。1
$ mkdir /tmp/temprepo && cd /tmp/temprepo && git init
$ cat << end > file
> Here is some text for a file.
> We want it to be long enough
> that renames and copies can
> be detected fairly easily.
> If we put ten lines into the
> file, then each percent of
> similarity is one tenth of
> each of the lines, i.e., each
> line represents 10% similarity
> to the earlier file.
> end
$ git commit -m initial
[master (root-commit) 842824a] initial
1 file changed, 10 insertions(+)
create mode 100644 file
$ git mv file newname
$ git diff --cached --name-status
R100 file newname
让我们继续并提交它,这样我们就可以 git diff
两次提交,而不是提交和索引:
$ git commit -m B
[master a2380eb] B
1 file changed, 0 insertions(+), 0 deletions(-)
rename file => newname (100%)
看看它做了什么:
$ git diff --name-status -M HEAD^ HEAD
R100 file newname
现在让我们做一个小改动:
$ ed newname
279
9s/10/about 10/p
line represents about 10% similarity
w
285
q
$ git commit -a -m C
[master 57fce41] C
1 file changed, 1 insertion(+), 1 deletion(-)
$ git diff --name-status -M HEAD~2 HEAD
R087 file newname
--name-status
之间的差异(选择了 HEAD~2
模式) (初始提交)和最新提交现在显示该文件 file
已重命名为 newname
只有 87% 的相似度,而不是 100% 的相似度(如现在在 HEAD~2
和 HEAD~1
之间看到的那样)。2
要查看副本,您通常必须运行 git diff
与 -C
和/或 --find-copies-harder
.
您可以控制在 -M
之后使用数值检测重命名(和副本)的相似文件必须达到的程度。 (和 -C
),例如 -M90%
导致上述 git diff --name-status
将重命名视为添加和删除对:
$ git diff --name-status -M90% HEAD~2 HEAD
D file
A newname
-B
选项也会影响重命名检测,git config
也是如此。设置diff.renameLimit
和 diff.renames
(请参阅文档)。完全击败重命名检测——这使得使用 --diff-filter
编写 git 钩子(Hook)脚本成为可能在许多情况下更容易——使用 --no-renames
(或任何不遵守 diff.renames
的瓷器命令;另请参见脚注 1)。
1当 diff.renames
时,此相似性测试默认为“50% 相似”启用,禁用时“仅完全匹配”。在 2.9 之前的 Git 版本中,diff.renames
默认为 false
(禁用);在 2.9 及更高版本中,它默认为 true
(已启用),也可以设置为 copy
或 copies
启用 -C
选项也是如此。请注意 diff.renames
设置适用于 git diff
,这就是 Git 所说的瓷器(或面向用户的)命令,而不是,例如 git diff-tree
。 ,这就是 Git 所说的 plumbing 命令。您必须使用 -M
或 --find-renames
如果您希望管道命令进行重命名检测,请选择此选项。
2之前,我们使用了HEAD^
和 HEAD
,但我们添加了提交 C
从那时起,初始提交现在是 HEAD^^
或 HEAD~2
.
关于git - 什么使 git diff --diff-filter=CR 命令中的 C 和 R 过滤器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21697280/
我正在使用 Ubuntu 15.04 和 vim-gnome 7.4。 当我运行时: vim --version | grep -i +ruby 它返回: +ruby 基于:Vim Ruby Supp
我正在编写一个测试脚本,它将简单地运行带有几个参数的 *.EXE 文件,然后将结果输出到一个文件。我有一个 *.sh 测试脚本可以正确运行测试(但需要手动更新更多测试)。此脚本中的行如下所示: bla
我想知道之间的区别(如果可能的话提供示例)CR LF (Windows)、LF (Unix) 和 CR (Macintosh) 换行符类型。 最佳答案 CR和LF是控制字符,分别编码为0x0D(十进制
我正在尝试使用 PHP 正则表达式来查找 CR 3492161 或 cr 3492161。我尝试使用以下正则表达式,但它不起作用。请求你的帮助。 :-) 'CR\s/^\d{7}$/' 'CR\h/^
交换换行符(例如通过某些文本编辑器)是否会破坏 javascript 代码? 最佳答案 两个控制字符都是valid line breaks .事实上你甚至不需要换行符。这只是为了更好的可读性。除了在字
这个问题已经有答案了: How to correct variable overwriting misbehavior when parsing output? (3 个回答) 已关闭 5 年前。 我
好的,我计划创建一个文件来存储我将导入到程序中的数据。该程序将为 Linux、Windows 和可能的 Mac 编译。 现在我真正想知道的是,由于这些文件中的换行符,我是否需要这些数据文件略有不同,或
建议以下计划: import java.io.StringReader; import javax.xml.transform.OutputKeys; import javax
我正在尝试将“,”和“\n”放入文件中。所有值都是 0 ,除了 4, 9, 14, 19, 23...我放置 ',' 和 '\n' 但是输出即将到来: 0000,0000,0000,0000,0000
我一直在尝试通过 Python 学习 Open ERP 模块开发。我想出了一个我认为我不理解的源代码。我在浏览时尝试了几个互联网链接,但找不到有用的链接。我非常需要理解这一点。 cr.execute(
我目前正在使用 JSP 生成一些 vCard。我发现一些平台无法识别这些生成的 vCard,除非它们的行由回车符 (CR) 分隔,而 JSP 似乎默认只使用换行符 (LF) 来分隔行。 你们知道有什么
验证用户时出现以下错误:purchase_user@purchase 失败。 MongoDB-CR 身份验证失败。当我通过浏览器访问网络服务时,用户文档中缺少凭据。 但我能够从 mongo 验证 pu
首先我想说我已经阅读了 this post但是我仍然对 CR line terminators 有问题. 有一个文件叫build_test.sh , 我编辑在 leafpad它可以直接显示在 Vim
我最近才开始使用 vim,并且在添加大量有用的插件时玩得很开心。问题是,在设置所有插件期间的某个时候,我没有注意到 enter 键的映射停止正常工作。在插入模式下,当我按下 Enter 键时,如果当前
我正在寻找一种在 vim 中突出显示 ^M(CR) 的方法。 最佳答案 确保文件格式设置为 unix 或 mac 我的是: set fileformats=unix,mac 如果是 DOS,您将看不到
假设我有一个程序(例如在Perl中),将这样的内容写入STDOUT: print "123\t- 456"; print "\r+\n"; 在我的屏幕上,我看到以下结果: 123 + 456
我正在编写一个在特定条件下自动插入一些文本的函数。当我尝试模拟 Enter press 时,我卡在了某个部分。我想出了这个(显而易见的)代码: execute "normal! a\" 问题是它破坏了
我有一个 HTML 页面中的元素。我正在用 JavaScript 向其中写入数据,并想稍后检查用户是否更改了文本。但是,如果数据包含任何回车符,它们似乎会被悄悄删除,因此将从文本区域读取的文本与应该存
各位正则表达式专家, 我有一个充满表达式的平面文件,例如: SELECT * FROM CONVENIENT_ONE_LINE_QUERY "SELECT * FROM THIS_QUERY WHER
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 6 年前。 Improve th
我是一名优秀的程序员,十分优秀!