在 GitLab 上,如何比较两个不同提交的文件

Posted

技术标签:

【中文标题】在 GitLab 上,如何比较两个不同提交的文件【英文标题】:On GitLab, how to compare a file of two different commits 【发布时间】:2018-10-08 16:56:32 【问题描述】:

?我知道在命令行 git 上,命令是:

git diff commit1 commit12 -- file_name

在 GitLab 上执行此操作的链接格式是什么?

查看我的相关@​​987654321@

【问题讨论】:

我在 Gitlab 看到了一种比较提交的方法,但我怀疑您可以在比较中选择一个文件——您必须导航到整个已更改文件列表中的文件。 @phd 是的,我显示了比较完整修订版的选项,但是当您单击其中一个文件名时,它会向下滚动到正确的位置,这对我来说已经足够了,问题就是,要指定正确的地方,需要加一个hash参数,这看起来很随意。有没有办法计算? 不知道。你必须在 gitlab 源码中找到算法。 只是the SHA-1 hash of the file path。 @yigal 这仍然没有被接受的答案,但我想你已经找到了,不是吗? 【参考方案1】:

它将比较提交,您将能够在列表中找到文件。

    转到存储库 > 比较 粘贴此网址:https://gitlab.com/$USER/$REPO/compare?from=$SHA1&to=$SHA2 回车(注意:gitlab 会正确设置 'Source' 和 'Target') 点击“比较”按钮

【讨论】:

谢谢,但这将比较整个提交。我需要一个链接来比较两个提交之间的单个文件 去列表中搜索您的文件,您可以展开并查看更改 试过了,但它不起作用,我得到:There isn't anything to compare. You'll need to use different branch names to get a valid comparison. @Adam 对我来说,当您使用完整提交 SHA 时它可以工作,例如:gitlab.com/<user>/<project>/compare/… @adam 尝试颠倒顺序。将较新的提交放在第一位,旧的提交放在第二位。 (这是一个已知问题)【参考方案2】:

比较的直接网址如下

# compare URL, where ref_source and ref_target can be commit SHA, tag, or branch
https://$gitlab_host/$repo_path/compare/$ref_target...$ref_source

# tag example 1, comparing tag v1.5.1 to master
https://$gitlab_host/$repo_path/compare/v1.5.1...master

# tag example 2, comparing tag v1.5.1 to tag v1.5.2
https://$gitlab_host/$repo_path/compare/v1.5.1...v1.5.2

# commit example 1, comparing commit SHA to master
https://$gitlab_host/$repo_path/compare/f6098082f...master

# commit example 2, comparing commit SHA to another commit SHA
https://$gitlab_host/$repo_path/compare/f6098082f...2b8daf28

要跨两次提交比较单个文件,需要先获取文件的 blob id,并将其附加到比较 url 后面的 octothorp (#);不过得想办法得到那个id

# compare URL, where ref_source and ref_target can be commit SHA, tag, or branch, and file_blob
https://$gitlab_host/$repo_path/compare/$ref_target...$ref_source#$file_blob

【讨论】:

当我尝试比较两个 commints 时,我得到 ` 没有什么可比较的。您需要使用不同的分支名称来进行有效比较。`【参考方案3】:

其他答案都没有正确的步骤来通过当前版本的 Gitlab GUI 显示两个分支之间的差异。这样做:

    转到您的项目 将鼠标悬停在侧面菜单中的“存储库”上,然后单击“分支” 在您要比较的分支旁边,单击右侧的“比较”按钮。 然后,您可以根据需要将目标分支从 master(或任何默认分支)更改。 顶部是提交。向下滚动以查看每个修改文件的实际差异。 滚动到您要比较的特定文件,并在必要时单击以展开。

【讨论】:

在第 4 步之后,只需使用您的提交 ID 更新 URL @ADV-IT 我能够在 GitHub 上“以这种方式破解”,但在 GitLab 上却不行……有人知道为什么吗?【参考方案4】:

您可以打开两个标签页:

    转到提交列表(在侧边栏中:Repository -&gt; Commits),您可以从中获得任何给定提交的SHA(右侧有复制按钮)方便; 使用比较工具(在侧边栏中:Repository -&gt; Compare),然后在顶部的sourcetarget 中,通过您要比较的两个提交的SHA 字符串。

【讨论】:

【参考方案5】:

您首先需要获取您感兴趣的文件路径的sha1 摘要(例如使用sha1sum 命令)。然后,您可以构建 URL 以显示两个 git ref 之间的差异(即分支名称或提交哈希或标签),如下所示:

https://gitlab.com/<project>/-/compare/<ref1>...<ref2>#<sha1>

以下是 AN/R5/L15/S2018/IDS/000/020/RUANR5L15S2018IDS20864.json 文件名的示例。它的sha1是f88a5e03ecc7854e8955927af33f2ea9d090ddaf

$ echo -n AN/R5/L15/S2018/IDS/000/020/RUANR5L15S2018IDS20864.json | sha1sum
f88a5e03ecc7854e8955927af33f2ea9d090ddaf

878bd4f4f7edbabad3c691a7df3e317348d4ca7759e63f529a7fe5f28131dec36f253dca46b8ba9c 提交之间的比较是通过 URL:https://git.en-root.org/tricoteuses/data.tricoteuses.fr/Agenda_XV/-/compare/59e63f529a7fe5f28131dec36f253dca46b8ba9c...878bd4f4f7edbabad3c691a7df3e317348d4ca77#f88a5e03ecc7854e8955927af33f2ea9d090ddaf

该页面还将显示其他差异,而不仅仅是您感兴趣的差异。但它会将您移动到文件差异开始的位置,您可以忽略其余部分。

有a few GitLab feature requests,方便用户日后发现。

【讨论】:

如果所述 JSON 文件的差异不在第 1 页上,则此操作失败,因为它是浏览器滚动到的 html 锚。【参考方案6】:

如果你想比较一个文件的不同版本

1.Repositoy->Commits->选择文件->并排点击

2.你会看到两个窗口,左边是旧版本,右边是新版本。

【讨论】:

这将显示单个提交的更改仅相对于其父项。【参考方案7】:

只要可以在屏幕上查看代码,您就可以通过 GitLab Web 界面通过简单的点击来完成此操作。

在您的存储库上,单击左侧菜单选项“提交”。右侧窗格将显示存储库中所有提交事件的列表。 单击与您感兴趣的文件对应的文件。您将能够看到它的“之前和之后”状态。 您可以在“内联”或“并排”模式下查看它,其中以绿色突出显示变化。

【讨论】:

以上是关于在 GitLab 上,如何比较两个不同提交的文件的主要内容,如果未能解决你的问题,请参考以下文章

将Git工程提交到两个不同的仓库

同一主机设置多个密钥与不同github账号关联,或同一主机同一密钥分别关联github和gitlab

如何在mac上使用git连接私有的gitlab服务器

Gitlab Lost refs 文件夹 - 提交不可见

如何防止 Gitlab 在分支合并上创建额外的合并提交

如何在Gitlab CI脚本中删除符号链接的目标?