忽略拉取请求差异中的特定文件、文件类型或文件夹

37

我们经常使用“文件更改”标签来审查我们在分支上所做的工作,但是不幸的是,我们开发过程的一个主要部分是重新生成Flex服务,因此在查看更改的文件时,99%的更改都是无关紧要的。这使得很容易忽略应该审核的重要更改。

我们知道这些重新生成的服务所在的文件夹,如果可以帮助的话,我们可以将所有重新生成的更改提交到一个提交中。

有人有什么建议可以改善这个问题吗?理想情况下,我们希望可以从拉取请求差异中排除一个文件夹。


你找到解决方案了吗? - Callistino
我也对这个问题很感兴趣。 - Emanuel
2
你确定这些文件一开始就不应该在.gitignore中吗? - Daniele Segato
7个回答

31

Github现在支持使用.gitattributes文件进行此操作。

  1. 在存储库的根目录中创建一个.gitattributes文件。

  2. 使用由linguist生成的属性来标记或取消标记您希望在存储库的语言统计信息中忽略并默认在diffs中隐藏的路径。

例如,要将search/index.json标记为生成的文件,请将此行添加到.gitattributes

search/index.json linguist-generated=true

参考资料:https://help.github.com/en/github/administering-a-repository/customizing-how-changed-files-appear-on-github


3
感谢您的请求!针对一个递归的文件夹,可以使用以下命令进行筛选:folder/**/* linguist-generated=true - tkit
所有文件类型将如何工作?经典通配符似乎不起作用,即 *.filetype - Big Money
3
对我来说,目录中标记为“linguist-generated”的所有文件都弹出空内容(带有“Load diff”按钮)。这是期望的行为还是预计文件不会在PR中显示? - livinston
2
我看到了与@livinston相同的行为,文件仍然显示在差异中,但您必须单击“加载差异”按钮才能查看内容。对于我的目的来说,这并不有用,因为我想要排除的文件很大,所以它们无论如何都会被显示,而且我也希望它们从计数中排除。 - kiml42

9
为了排除某个文件夹,我编写了一段巧妙的脚本,您可以通过开发工具执行。
const fileElements = document.querySelectorAll("*[data-path*='vendor']")
fileElements.forEach(el => el.parentElement.remove())

这将删除与%vendor%匹配的任何文件差异,在我的情况下。


6

我知道这是一个老问题,但我仍想分享我的解决方案。作为iOS开发者,在更新使用Carthage获取的库时,我也可能遇到这个问题。所以,在我对拉取请求进行审核之前,我会运行以下脚本:

document.querySelectorAll("*[data-path*='Carthage']").forEach( el => {
    const item = el.querySelectorAll("input[type=checkbox][name=viewed]:not(:checked)")[0]
    if ( typeof item !== "undefined" ) {
        setTimeout(function () {
            item.click()
        }, 1000)
    }
})

在Mac上的Safari浏览器,通过控制台(开发者工具)运行它:CMD + Option + U。它将找到路径中包含Carthage的所有未选中的“已查看”复选框,并“点击”它们。之后,选择过滤器以不显示已查看的文件。


这对于在PR中标记供应商文件夹中的成千上万个文件非常有帮助。 - Mike R

3
Github现在有更多功能来浏览pull request了。您可以筛选并跳转到pull request中的特定文件。在pull request的任何地方按下键即可访问此功能。
您还可以像您所提到的那样,将不需要审查的文件保留在单独的提交中。然后您可以利用提交筛选功能,仅查看一个提交中的更改而不是整个pull request。按下键会弹出选择器,而

和则允许您移动到上一个和下一个提交。 <问号>键会显示键盘快捷键列表。

来源:https://github.com/blog/2123-more-code-review-tools

2

虽然您无法从拉取请求中排除文件,但是您可以(自2018年12月以来)对其进行过滤。

请参见 "拉取请求文件过滤器":

在拉取请求的“更改的文件”选项卡中,您现在可以:

  • 按文件类型筛选或
  • 隐藏所有已删除的文件,以便专注于您关心的差异。

请参阅文档 "按文件类型过滤拉取请求中的文件"

https://help.github.com/assets/images/help/pull_requests/file-filter-menu.png

你可以在这条推文中看到该新功能的动画演示。
另外,别忘了你已经可以通过在差异视图中点击箭头上的Alt+Click来只显示文件名,并使用折叠全部/展开全部切换。
注意:目前筛选器不支持正则表达式。要实现这一点,你仍需要一个Chrome扩展程序

1
目前GitHub不支持从pull request中排除文件或文件夹的方法。
如果我在发送pull request时遇到这个问题,并且这是给我的开发团队带来痛苦的原因,我只能想到以下解决方案:
目标是从差异中排除文件和文件夹,但同时您不希望在整个pull request准备好之前合并服务的更改。这个解决方案并不理想,但您可以:
1.提交和推送您不感兴趣的文件夹-分支A
2.分离出您真正打算比较的文件-分支B
3.从B向A打开一个pull request,您将只看到自己感兴趣的内容。
这个建议有些问题:
1.您需要以某种方式自动化此过程,否则它将是太多的手动工作(bash脚本?)
2.如果您需要更改代码作为评论的一部分,则必须重复此过程,可能是因为您想要重新生成那些文件。这将使pull request的良好交流价值受到影响,其中您可以查看变更历史记录。
也许有更好的解决方案,但我在处理distribution files时遇到了相同的问题,我将其完全传递,以此来解决。不过,我想你的用例比我的复杂得多。
希望这可以帮助你或给其他用户一些启示。

0

请考虑在此处发布更多的答案,而不是链接到其他页面,因为这是 Stack Overflow 上首选的方法。 - sao

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接