我正在尝试获取当前分支中所有已更改的python文件的列表,此列表稍后会送入脚本中以运行linter。以前我是通过以下命令来完成的。
FORK_POINT=$(git rev-parse origin/master)
PY_FILES=$(git --no-pager diff --name-only HEAD $FORK_POINT | grep "\.py$")
在我当前的分支中,我所做的更改之一是将一些文件移动到另一个文件夹,但是此代码返回了已移动文件的原始文件路径。我该如何修改以返回当前的文件路径?
TL; DR:交换差异“边”。
您的diff命令:
git [options] diff HEAD [other-commit]
要求Git拍摄两个快照:
HEAD
和
other-commit
并找到一些合理的最小更改集,如果将这些更改应用于列出的第一个提交,则会HEAD
更改这些文件以产生第二个提交中包含的文件集。如果Gitnewname
将第一个集合中的文件oldname
与第二个集合中的文件进行匹配,则说明包括“将新名称重命名为旧名称”。
要以有保证且可机器解析的方式获取这些说明,请使用:
git diff --name-status --find-renames
而不只是git diff --name-only
。该status
信将R
,其次是为什么Git的决定这些文件是足够相似,以百分比表示,其次是两个人的名字。
要获取将旧名称更改为新名称的说明,请按照相反的顺序进行比较。把对方承诺在左侧的侧现货最差的游戏,并把HEAD
承诺的右侧边。Git将再次找到一些合理的最小更改集,如果应用了这些更改,这些更改将把左侧(旧)提交变成右侧(新)提交,但是由于旧提交现在是左侧提交,因此这些说明将说明“将旧名称重命名为新名称”。
请注意--name-only
或--name-status
取消了大多数指令(它本身很好,实际上可以加快的工作git diff
)。但是,顺序仍然很重要-仅因为重命名指令将左侧提交的文件名放在左侧,而右侧提交的文件名放在右侧。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句