在我的文本文件中,我经常移动大部分.换句话说,我选择一个长度为3到50行的部分,将其剪切,然后将其粘贴到文件中的其他位置.
在"未提交的更改"下,Git(我使用Github OSX)将这些行显示为在文件的一部分中"删除"并在另一部分中"添加".
鉴于我的工作流程,如果Git的差异显示没有突出显示我只是从一个地方移动到另一个地方的部分,那将会更有帮助.相反,我希望Git只为我突出显示全新的行,以及我从文件中完全删除的行.(以及我改变了一些部分的线条.)
有没有办法指示Git的diff显示忽略3+行的"已删除"部分,如果它在文件的其他地方找到相同的"添加"部分?
目前我用wdiff = diff-highlight.
更新:看起来像指定外部git diff很简单:
gitconfig
[diff]
external = ~/prose-diffs.py
Run Code Online (Sandbox Code Playgroud)
有没有人有一个外部的git差异比较"添加"部分与"删除"部分(忽略开头和结尾的换行符),并自动隐藏添加的行与删除的行匹配的任何部分?
步骤概要
差异程序:
所以事实证明 git 将使用以下参数调用您的 diff 程序:
> my_diff_tool <filename> <old_location> <old_hash> <old_mode> <new_location> <new_hash> <new_mode>
Run Code Online (Sandbox Code Playgroud)
因此,这是最简单的差异工具,它可以做一些接近您想要的事情。它读取文件,然后使用设置比较打印出新行和旧行。
#!/usr/bin/python
import sys
old = open(sys.argv[2]).read().splitlines()
new = open(sys.argv[5]).read().splitlines()
print "-"* 80
print "Filename: %s" % sys.argv[1]
# Simple set method
for line in set(old) - set(new):
print '- %s' % line
for line in set(new) - set(old):
print '+ %s' % line
if set(new) == set(old):
print "Text reordering only"
Run Code Online (Sandbox Code Playgroud)
以下是此输出与 diff 输出的示例:
my_diff_工具
Filename: test.txt
- luctus pellentesque.
+ luctus pellentesque. Puric huma te.
Run Code Online (Sandbox Code Playgroud)
差异
diff --git a/test.txt b/test.txt
index 2ec8f4b..797e2ad 100644
--- a/test.txt
+++ b/test.txt
@@ -4,15 +4,15 @@ dolor quis feugiat. Nullam vel interdum leo, a placerat elit. Mauris quis
faucibus dui.
Nullam eu sapien quis ex convallis tincidunt. Mauris tristique mauris ac
-luctus pellentesque.
+luctus pellentesque. Puric huma te.
Duis at imperdiet lacus. Sed malesuada elit vitae arcu semper, at fringilla
purus rhoncus. Sed vestibulum pellentesque libero in interdum. Fusce elementum
ornare vulputate.
+Nam sed enim at nisi tincidunt accumsan eu nec nisl. Duis suscipit hendrerit
+fermentum. Sed mattis purus congue velit aliquet, non placerat lectus varius.
+
Donec placerat, purus ac aliquet ullamcorper, elit leo accumsan ante, sed
lacinia leo sem sed metus. Morbi lacinia porttitor ante, eget consequat
libero accumsan in. Nunc sit amet lectus magna.
-
-Nam sed enim at nisi tincidunt accumsan eu nec nisl. Duis suscipit hendrerit
-fermentum. Sed mattis purus congue velit aliquet, non placerat lectus varius.
Run Code Online (Sandbox Code Playgroud)
显然,还有很多需要改进的地方。例如,集合将忽略重复的行。集合也会重新排序,因此如果有很多新行就更难理解。
这些改进留给读者作为练习。
使用新的 diff 程序
设置 git 配置以使用新工具非常简单。您也可以.gitconfig按照上面所示修改您的。
> git config diff.external /location/to/your/diff/tool/my_diff_tool
Run Code Online (Sandbox Code Playgroud)
您需要确保您的 diff 工具是可执行的,否则您将收到错误 ( fatal: cannot exec '/location/to/your/diff/tool/my_diff_tool': Permission denied),因此:
> chmod +x /location/to/your/diff/tool/my_diff_tool
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
219 次 |
| 最近记录: |