【问题标题】:GitHub contributions page shows too many changesGitHub 贡献页面显示太多更改
【发布时间】:2023-03-10 00:26:01
【问题描述】:

我一直在 Stack Overflow Jobs 上设置我的页面,我注意到在我的一个存储库中我有 3,521,316 个添加和 3,459,307 个删除,这看起来不正确,所以我决定进行调查。使用 GitHub 的贡献页面,我将更改本地化为 January 26–27,它说有 30 次提交,添加了 3,507,040 次,删除了 3,453,801 次。然而,当我单击 30 commits 文本查看提交时,there are only two 总共有 208 个添加和 152 个删除。我什至检查了所有其他分支,看看他们在那个时间范围内是否有其他提交,但没有一个。

我希望我的 SO Jobs 页面的贡献计数准确,除了为了准确而希望它们准确,但我不知道为什么它们如此严重不正确或如何更正它们。我在网上搜索了解决方案,但我发现的都是关于没有出现的贡献,而不是出现了太多的贡献。

【问题讨论】:

  • contributors 图表的某些内容似乎是错误的,因为它没有显示具有 500k +/- 的 this commit on Jan 31

标签: git github


【解决方案1】:

在回顾提交历史后,有一些大规模的提交,我更改了许多巨大的 JSON 数据文件,所以这似乎不是 GitHub 的错误(除了将所有这些更改归咎于贡献者页面上的一天)。知道实际上有大量的行更改,我开始尝试解决如何忽略这些文件,并遇到了this issue,这使我找到了 GitHub 的 Linguist 项目自述文件的this section。经过一番胡闹后,我发现marking the files as generated.gitattributes 文件中它们将被排除在差异之外,因此他们的行可能会被排除在总贡献之外。截至目前,我的总贡献尚未更正,但语言学家页面指出,更新是在较低优先级的队列上运行的,因此可能需要一些时间。

要忽略文件,请在您的.gitattributes 文件中添加这些属性之一。 .gitattributes 文件使用与.gitignore 文件相同的模式语法。如果您需要追溯执行此操作,则需要添加/修改 .gitattributes 文件,创建提交,然后变基为 insert it into the past

*.txt linguist-generated
# `linguist-generated` marks a file as generated, so it won't count toward
# language statistics or commit additions/deletions.

README.txt -linguist-generated
# prepending an attribute with a `-` removes it from the file

/libs/somelibrary.js linguist-vendored
# `linguist-vendored` marks a file as an external file such as a library. This 
# file will still appear in commit diffs, but it won't contribute to the
# repository's language statistics

/docs/** linguist-documentation
# `linguist-documentation` marks a file as documentation. This has the same
# effect as `linguist-vendored`.

/configs/*.json linguist-detectable
/tools/merge_configs.py -linguist-detectable
# `linguist-detectable` marks a file to be counted in language statistics. 
# By default it is enabled for programming languages, so you can use it to 
# either include non-code files, or exclude code files.

【讨论】:

    【解决方案2】:

    我在 GitHub 存储库贡献图上遇到了同样的问题,最后我发现了如何解决这个问题。值得一提的是linguist 对我没有帮助。

    如果第一部分或第二部分出现问题, here 您可以找到如何撤消 rebase。请不要 忘记备份您的存储库。

    更改提交的作者姓名

    注意:这将重写存储库提交历史,并且在 错误提交 之后推送的所有提交都将显示为已推送 今天在{repo-url}/commits/{branch}(提交的原始日期 不会改变)。

    More detailed source.

    • 因此,首先,创建存储库的备份并保存在某处。

    • 现在你应该找到你的错误提交哈希

    • 然后找到该提交之前的提交(较早的提交)。您可以使用git log 来执行此操作。

    • 复制该提交哈希并执行以下操作:

      git rebase -i earlier_commit_here
      
    • 将出现文本编辑器。找到您的 错误提交 并将其旁边的“pick”一词更改为“edit”(为此,请按键盘上的 i 按钮,然后更改文本,按 Esc 并输入 @987654334 @ 保存并退出)。

    • 现在您应该将提交的作者更改为类似的内容,无需电子邮件 (source):

      git commit --amend --author="nocontribute <>"
      
    • 要完成rebase,请输入以下内容:

      git rebase --continue
      
    • 强制推送历史:

      git push --force
      
    • 稍等片刻,等待贡献者的图表更新(最长 24 小时)。

    在我的情况下,我弄乱了我的存储库,上面的步骤没有帮助。如果您的贡献者的图表仍然相同,您可以执行以下操作:

    创建一个新存储库并将所有提交移至该存储库

    这些步骤的主要思想是cherry-pickpush 错误提交 与其他提交分开。所以如果你有不止一个 错误的提交记住这一点。如果您将所有提交推送到一起,它会将您的 错误提交 与“nocontribute”作者一起计算。奇怪但 真的。识别这一点需要很长时间。

    前面的步骤也应该完成才能继续。

    注意:这不仅会重写存储库提交历史,还会清除所有统计信息(因为您将创建一个新存储库)。只有提交会保留。

    Detailed source for moving commits to another repository.

    • 将您当前在 GitHub 上的存储库名称更改为 currentname-outdated

    • 创建一个名为 currentname 的新存储库并克隆它(不要忘记重命名您之前克隆的存储库名称)。

    • cd 到新克隆的存储库目录并键入以下内容:

      git remote add oldrepo https://github.com/path/to/oldrepo
      
    • 然后更新它:

      git remote update
      
    • 现在 cd 到旧的(过时的)存储库并保存到您的提交日志中:

      git log --pretty="format:cp %h" > commits.txt
      
    • 1234563 987654327@) 并将其保存到commits.sh 文件中。
    • 现在打开commits.sh 文件并复制并剪切错误提交 和它之后的所有提交并保存在其他地方。因此,您将在 commits.sh 文件中的 错误提交 之前进行提交。

    • cherry-pick 创建一个新别名:

      alias cp='git cherry pick '
      
    • cd 到你的新仓库并执行commits.sh:

      sh ../currentname-outdated/commits.sh
      
    • 将更改推送到存储库:

      git push
      
    • 在此处查看您的贡献者图表:{repo-url}/graphs/contributors。检查是否一切正常。

    • 然后接受你的错误提交,挑选它并推送:

      cp bad_commit
      git push
      
    • 再次检查贡献者的图表。

    • 如果一切正常,打开剩余的提交,从那里删除 bad commit 并将commits.sh 中的提交替换为保存的提交(bad commit 因为你已经推送了)。

    • 再次执行commits.sh

      sh ../currentname-outdated/commits.sh
      
    • 检查您的图表。

    • 现在继续从旧存储库中移动其他项目(如问题、标签、标签等)。

    希望对某人有所帮助。

    【讨论】:

      【解决方案3】:

      我检查了一下,GitHub 似乎有些问题。我尝试了一个解决方法并且它有效,转到您共享的 GitHub 链接(在26 and 27 Jan 2019 之间的时间范围内)然后从贡献下拉列表中选择Additions 选项,右上角,请参阅下面的屏幕截图 现在贡献图将重新渲染,现在再次单击相同的下拉菜单并选择选项Commits。现在点击30 commits,你会发现你所有的提交。

      【讨论】:

      • 有趣的是,这样做之后它会显示所有提交。我去了最新的提交并正在向上父链,刚刚找到一个 1.4m 行的提交,它正在修改一个 JSON 数据文件。我想我可能会回去缩小所有这些 JSON 文件,使它们成为 ±1 行,这样它们就不会膨胀。
      • 经过一番挖掘,我想我可能可以指示 GitHub 忽略这些文件:github.com/github/linguist#vendored-code
      • 直到今天才听说vendor.yaml,有意思。
      猜你喜欢
      • 1970-01-01
      • 2019-02-07
      • 2022-01-24
      • 2015-03-08
      • 2013-01-08
      • 1970-01-01
      • 2020-11-29
      • 1970-01-01
      • 2022-06-12
      相关资源
      最近更新 更多