从bash

时间:2016-04-17 20:07:17

标签: git

我想知道如何在bash脚本中的两个分支之间获得一些更改的文件,例如。

git diff v1.1.123..master --stat

这给出了一个文件列表和详细的更改/添加/删除,但是我需要bash变量中已更改文件的数量。

或者,无论如何要查明bash变量中的分支之间是否有任何变化,以便在有任何变化时我可以进行一些操作。

3 个答案:

答案 0 :(得分:3)

(答案是从评论中复制和扩展的,尽管现在这里的答案主要是几个“仅姓名或姓名状态”的问题。)

你已经离开那里了。只需将--stat替换为--name-status,然后根据状态编写代码进行计数。 (另请注意,git diff X..Ygit diff X Y完全相同:..的通常特殊含义(两个点)在git diff中消失。)

--name-only如果您不关心聚合添加,删除,修改以及可能的复制,重命名,类型更改(例如,从常规文件到符号链接)等的统计信息,也可以正常工作。您的差异将检测重命名取决于(a)文件相似性和(b)选项和/或diff.renameLimit的设置。复制检测同样受选项控制。请注意,您也可以使用--diff-filter选择(或者,因为git 1.8.5,排除 1 )特定的更改。

要仅计算文件,通过wc -l管道差异输出就足够了(但请注意其输出有前导空格)。

1 例如,git diff A B --name-status --diff-filter=AD只会生成添加或删除的文件列表。要排除类型更改项,git diff A B --name-status --diff-filter=t可以在git 1.8.5或更新版本中执行此操作;对于旧版本,您必须列出 T所有内容,例如--diff-filter=ABCDMRUX,具体取决于您是否要求配对中断。我还要注意,Unmerged和X(未知)不应该出现在这里;只有在对索引调用diff时才会出现U状态。

答案 1 :(得分:0)

执行此命令并对文件执行计数

 git diff --name-only SHA-1 SHA-2

如果您只想计算文件:

  

<强> git-whatchanged    - 显示每个提交引入差异的日志

 # replace the -1 with the desired number of commits you need
 # the output will be a number for the modified files,
 git whatchanged -1 --format=oneline | wc -l

要获取完整的文件列表(名称等,只需删除wc

git whatchanged -1 --format=oneline

答案 2 :(得分:0)

如果A和B是不同的分支,请键入

git diff A..B --name-status