我正在尝试查看当前分支的空白错误(忽略 CR 在eol)。大多数文件使用 CRLF ,而我没有 core.whitespace 配置集。
这是原始命令:
git -c core.whitespace=trailing-space,cr-at-eol diff --check master..HEAD
HEAD 是指在 master 的较旧版本之上创建的分支 (“ 旧主”)。
问题在于git diff --check
的行为方式异常:
不仅显示 master..HEAD 中的错误,还显示
oldmaster..master 。
是因为git diff --check
比较了整个快照
给定的修订范围?
在这种情况下,git log
和git diff
的行为为何不同?
不应git diff --check
仅比较已更改的行和已更改的行。
文件?
master 与 oldmaster (数字是巧合的):
$ git log --oneline oldmaster..master | wc -l
115
$ git diff --name-only oldmaster..master | wc -l
115
这正确显示了相关的提交:
$ git log --oneline master..HEAD | wc -l
4
这显示了正确的文件:
$ git log --oneline --name-only master..HEAD -- | grep -E '^[a-zA-Z]+/' \
| sort -u | wc -l
4
由于某些原因,这些文件还包括在 oldmaster..master 中更改的文件:
$ git diff --name-only master..HEAD -- | wc -l
119
$ git -c core.whitespace=trailing-space,cr-at-eol diff --name-only \
master..HEAD -- | wc -l
119
这两个文件还显示不相关的文件:
$ git diff --check master..HEAD -- | grep -E '^[a-zA-Z]+/' | cut -d : -f 1 \
| sort -u | wc -l
30
$ git -c core.whitespace=trailing-space,cr-at-eol diff --check master..HEAD \
-- | grep -E '^[a-zA-Z]+/' | cut -d : -f 1 | sort -u | wc -l
9
答案 0 :(得分:2)
除了组合的差异(此处未使用)之外,CameraCharacteristics c = cameraManager.getCameraCharacteristics(cameraId);
Rect activeArray = c.get(CameraCharacteristics.SENSOR_INFO_ACTIVE_ARRAY_SIZE);
int cropWidth = activeArray.width() / mZoomLevel;
int cropHeight = activeArray.height() / mZoomLevel;
int cropLeft = (activeArray.width() - cropWidth) / 2;
int cropTop = (activeArray.height() - cropHeight) / 2;
Rect cropRegion = new Rect(cropLeft, cropTop, cropLeft + cropWidth, cropTop + cropHeight)
captureBuilder.set(CaptureRequest.SCALER_CROP_REGION, cropRegion);
严格比较两个快照。 1 使用的语法-git diff
vs git diff A B
-在这里无关紧要。 Git提取快照A,提取快照B,然后比较这两个快照。您使用的所有标志选项(例如git diff A..B
)都将应用于此特定比较。提交--check
不必是A
的祖先,反之亦然; Git不会查看这两个提交之间的任何提交;它只提取B
,然后提取A
,然后对它们进行比较。 2
B
命令的作用非常不同:它遍历修订图。给定git log
,Git会发现所有无法从 git log A..B
到达的可从 B
提交的提交。有关可达性的明确定义,请参见Think Like (a) Git。
请注意,在将A
与-p
一起使用时,以补丁的形式查看提交时,git log
会将每个提交与其父(单个)进行比较。例如,如果在git log
范围内有三个提交,则A..B
首先显示git log -p A..B
并运行B
,然后显示git diff B^ B
并运行{{1} },最后显示B^
并运行git diff B^^ B^
。 (这假设该范围内没有合并提交,但是默认情况下B^^
会默认删除合并提交的补丁。)
1 要查看组合的差异,请在合并提交上使用git diff B^^^ B^^
。 git log
命令还会产生带有某些特定参数的组合差异,有时可能会产生错误:特别是三个点语法git show
旨在比较{ {1}}和git diff
提交git diff A...B
,但有时会有所不同。另外,当您使用索引并且索引包含有冲突的合并时,纯A
将产生组合的差异。
2 从技术上讲,它甚至不必提取两个快照,而只是直接从它们的树对象中工作。为了计算差异,它确实必须提取不同的斑点。对于相同的Blob,B
知道它们是相同的,因为它们的哈希ID匹配。但是将其推断为“提取和比较”比较容易。