如何获取自创建分支以来更改的文件的当前文件路径列表



我正在尝试获得当前分支中更改的所有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-将更改这些文件以生成第二个提交中包含的文件集。如果Git匹配了第一个集合中名为newname的文件和第二个集合中名为oldname的文件,指令包括"rename newname to oldname"

要以保证机器可解析的方式获得这些指令,请使用:

git diff --name-status --find-renames

而不仅仅是git diff --name-onlystatus字母将是R,后面是为什么Git决定这两个文件足够相似,用百分比表示,后面是两个文件名。

要获得将旧名称更改为新名称的指令,请以相反的顺序执行diff。在Spot-the-Difference游戏中,将另一个提交放在左侧,并将HEAD提交放在右侧。Git将再次找到一些合理的最小更改集,如果应用这些更改集,将把左侧(旧)提交转换为右侧(新)提交——但是由于提交现在是左侧的,因此这些指令将显示"重命名oldname为newname"。

注意--name-only--name-status抑制了大多数指令(这本身是好的,并且实际上加快了git diff的工作速度)。然而,顺序仍然很重要——这仅仅是因为rename指令将左侧提交的文件名放在左边,而将右侧提交的文件名放在右边。

最新更新