TL;DR 我配置了一個 difftool 并git-diff給出了“智能”差異但git-add創建了“愚蠢”的帥哥。為什么?
我將 difftool 配置為使用nbdime,nbdime config-git --enable --global我認為基本上只是將這些行添加到我的 .gitconfig 中:
[diff "jupyternotebook"]
command = git-nbdiffdriver diff
[merge "jupyternotebook"]
driver = git-nbmergedriver merge %O %A %B %L %P
name = jupyter notebook merge driver
[difftool "nbdime"]
cmd = git-nbdifftool diff \"$LOCAL\" \"$REMOTE\" \"$BASE\"
[difftool]
prompt = false
[mergetool "nbdime"]
cmd = git-nbmergetool merge \"$BASE\" \"$LOCAL\" \"$REMOTE\" \"$MERGED\"
[mergetool]
prompt = false
現在git diff給出了我期望的良好輸出:
nbdiff /var/folders/6b/03yw1pts2nx_q8vftrh6fv140000gp/T//FILE.ipynb FOLDER/FILE.ipynb
--- /var/folders/6b/03yw1pts2nx_q8vftrh6fv140000gp/T//FILE.ipynb 2022-05-17 14:29:39.937318
FOLDER/FILE.ipynb 2022-05-17 14:09:45.222229
## inserted before /cells/0:
code cell:
source:
...
markdown cell:
source:
...
## deleted /cells/0:
- markdown cell:
- source:
- ...
## inserted before /cells/2:
code cell:
source:
...
但如果我這樣做git add -e FOLDER/FILE.ipynb,它會給我一個“非常糟糕”的差異:
diff --git a/FOLDER/FILE.ipynb b/FOLDER/FILE.ipynb
index 3a1540c..17363f8 100644
--- a/FOLDER/FILE.ipynb
b/FOLDER/FILE.ipynb
@@ -1,621 1,716 @@
{
- "cells": [
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- ...
- ]
- },
- ... almost every line in the file is removed
"cells": [
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "j1qKT6qtAYEj"
},
"outputs": [],
"source": [
...
]
},
... almost every line in the file is added back
我可能對 git-add 的作用有一個基本的誤解,但為什么不git add使用 nbdime diff 工具呢?有沒有辦法可以只添加我看到的更改git-diff?
uj5u.com熱心網友回復:
兩者都git add -e需要git add -p能夠理解已編輯的差異。一般來說,他們對差異的理解有限,并且需要來自 plain 的“啞”格式git diff。這些nbdime工具將原始檔案分開,將它們重新洗牌成可用的文本,并區分可用的文本,1但這不是檔案中的實際內容,需要git add -e處理檔案中的內容,而不是對其進行一些清理的演示。
1檔案中的內容是機器可讀的 JSON。工具的結果nbdime似乎是 yaml。如果 Git 有一個原生的 JSON diff 引擎,git add -p公司可以處理結果,但 Git 沒有,所以它不是。如果 Jupyter-notebooks 使用 yaml,Git 的面向行的工具將能夠處理它們,但 Jupyter-notebooks 沒有,所以它不是。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/477763.html
