问题标签 [git-diff-tree]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
434 浏览

git - 为什么 git diff-tree show 总是显示重命名为添加和删除

在两个测试提交中,第一个只有 operation git mv file moved_file,第二个只有,在提交之前mv moved_file moved_again_file && git add -A moved_file moved_again_file都显示为重命名,但它们显示为新文件和已删除文件。git statusgit commit --verbose

我期望git diff-tree HEAD在每次提交后显示一个R(重命名)状态,但我不断得到两个: anA和 a D

我正在尝试编写一个脚本,该脚本将根据文件状态执行操作,但如果它们始终显示为添加/删除,我将无法正确规划R(或)状态。C

Git 是 1.8.3.1 版本,如果这有什么不同的话。

0 投票
1 回答
203 浏览

git - Git alias does not print output of command

I have the following git alias

When using the above command by hand I get the following stdout:

When using the alias the output is not available therefore I cannot use it to patch:

0 投票
1 回答
87 浏览

git - 您可以在 2 个分支上执行 'git diff',但将其限制为仅一个目录子树吗?

我正在开发一个大型 Web 项目,其中包含大量用于执行 RESTful API、身份验证等的代码。一个大型团队可以完成所有这些工作。我只在项目的科学计算内核上工作,一个目录中大约有 20 个文件。

有没有办法在两个分支之间进行“git diff”,这仅限于单个目录中的那些文件?

如果我执行“git diff master my_branch”,我会在数百个与我无关的文件中看到增量。当然,我可以通过执行 'git diff master my_branch -- file1'、'git diff master my_branch -- file 2' 等在我关心的目录中逐个文件地执行此操作,但这非常乏味。

我想做的基本上是'git diff master my_branch -- /root/foo/scientific_modules/*.py'或类似的东西。

0 投票
2 回答
4829 浏览

git - 如何在詹金斯的主分支上运行 git diff-tree?

我希望能够在 jenkins 构建期间查看当前分支和主分支之间哪些文件发生了更改。

在我的 jenkinsfile 中,我有以下代码。

但我收到以下错误

致命:模棱两可的参数“主”:未知的修订或路径不在工作树中。

任何帮助将不胜感激..如果有人能告诉我我做错了什么或设计一种替代解决方案来为我提供已更改文件的文件路径,那就太好了。

仅供参考,上述命令在本地有效,但在詹金斯中无效。

0 投票
0 回答
61 浏览

git - 如何获取 git 提交中更改的文件列表?

我需要在 git 提交中更改的文件列表(特​​别是常规文件,而不是符号链接、目录、子模块等)。我知道(例如在这个答案中),它git diff-tree --name-status提供了非常有用的输出,显示了已更改对象的列表以及发生了什么样的更改。这包括T在类型更改时给出一个标志,但我没有看到任何方法将其过滤为特定类型的对象。

我可以使用什么管道命令来获取类型(大概在应用提交之后,而不是之前)为常规文件类型的文件的列表?

0 投票
1 回答
561 浏览

git - GIT:获取通过提交添加到存储库的所有 git 对象哈希

是否可以使用 git 命令行工具获取已通过给定提交哈希添加到存储库的所有 git 对象哈希的列表?

我已经尝试使用 git 管道工具将其存档git-diff-tree。也许这是错误的方法。以下是迄今为止我能得到的最好结果。但是(非常长的手册页)文档并没有帮助找出必须如何准确地解释输出。

第一个和第二个 git 对象 blob 哈希是否分别显示修改文件的旧对象和新对象?在最坏的情况下,我可以通过解析输出来获取该信息。

我的主要目标是找到一个如下工作的命令行:


在下面编辑以响应@torek

为了回应@torek 的回答,我想更清楚我的意图是什么,因为他绝对正确地指出新的不一定是新的。

我打算用来git rev-list --reverse <branch>按提交顺序获取该分支上所有提交的列表。然后我想按这个顺序访问每个提交,并在每次提交时收集这个分支上第一次看到的 blob 哈希。

最终结果应该类似于以下内容:

C:提交 B:blob

如果这不容易完成,则可以进行两次通过。由于您指出的原因,在第一遍中,可以在不同的提交中多次提及 blob:

  • 在另一个文件中添加具有相同内容的文件
  • 文件修改后内容相同

然后我可以对文件进行第二次传递,通过该文件awk '!x[$0]++'将删除任何重复项。这不会很有效,但会得到我想要的结果。

我希望我现在表达了我的意图。有什么想法吗?

0 投票
1 回答
279 浏览

git - 为什么`git diff-tree` 应用于第一次提交时不打印结果?

我通常使用git diff-tree <tree-ish>这些选项: --no-commit-id --name-status -r--no-commit-id --name-only -r列出特定提交中添加和更改的文件。

我今天刚刚注意到,此命令在应用于第一次提交时不会打印结果!。

那么为什么,以及如何克服呢?

0 投票
1 回答
207 浏览

linux - 根据文件扩展名过滤 git diff-tree 的输出

给了我为那个 SHA 提交的所有文件的列表。

我正在寻找一种方法来获取仅具有 .xml 或 .html 扩展名的文件列表。

我检查了文档页面 -在这里,看不到任何选项。

任何帮助是极大的赞赏。

0 投票
0 回答
20 浏览

git - 最接近给定树的 Git 修订版

设置:

我有一个父项目。我克隆它,重新初始化 .git,进行更改并提交它们,然后进行许多提交:

问题:

一段时间后,我意识到我做了一件坏事,我实际上想保留parent_project. 自从我的克隆以来,parent_project有 2000 次提交,我不记得我克隆了什么版本。更糟糕的是,在第 5 步中,我进行了更改并将它们添加到“初始”提交中。文件创建和修改日期丢失。

我如何找出我克隆了哪个版本?

我的想法是我需要git diff-tree -r在一定范围内的每次提交上运行,并计算文件之间的差异。“距离”最小的修订版可能是我的基础修订版。是否有任何工具已经可以做到这一点或类似的东西?