如何在GitHub上链接到特定行号

510
我知道我可以在GitHub存储库的文件中链接到特定行号(我确定以前见过这种情况)... 我该如何做到这一点?
9个回答

766

不要只链接到行号!一定要使用规范URL。否则,当该文件更新时,您将拥有一个指向错误行的URL!

如何创建正确行的永久链接:

单击您想要的行号(例如第18行),您浏览器中的URL末尾将添加#L18。您实际上是点击左侧的18,而不是代码行。看起来像这样:

line 18 selected

现在你的浏览器URL看起来像这样:

https://github.com/git/git/blob/master/README.md?plain=1#L18

如果您想选择多行代码,只需按住Shift键并单击第二个行号,例如第20行。效果如下:

Enter image description here

现在你的浏览器URL看起来像这样:

https://github.com/git/git/blob/master/README.md?plain=1#L18-L20

这里是重要的部分:

现在按下 Y 键获取该特定提交的规范 URL。浏览器中的 URL 将更改为类似以下内容:

https://github.com/git/git/blob/5bdb7a78adf2a2656a1915e6fa656aecb45c1fc3/README#L18-L20

该链接包含特定提交的实际SHA-1哈希,而不是master上文件的当前版本。这意味着此链接将永久有效,而不会指向该文件未来版本中可能包含的第18-20行。

现在享受您的新永久链接的光辉吧。 ;-)

在本答案最初撰写后,watashiSHUN指出GitHub现在更容易获取永久链接。在选择一个或多个行之后,左侧提供了一个...菜单,如下所示:

GitHub permalink menu

请看watashiSHUN的回答
请注意,GitHub对于一些“可渲染”的文件(如Markdown文件)不显示行号。在URL后加上?plain=1将会显示带有行号的源文件,例如https://github.com/git/git/blob/master/README.md?plain=1

3
对我来说,按“y”键没有任何反应。这个有变化吗?我是在使用Google Chrome Dev版本测试的。 - k0pernikus
4
仍然可以使用...文档仍然建议使用 y 键...https://help.github.com/articles/getting-permanent-links-to-files/ - broc.seib
4
按Shift键并点击第二行来选择一个块是个好办法!我之前一直手动编辑URL来添加第二行 :)。接下来的问题是,如果我想要突出显示第2行、第4行以及从第17行到第22行,这是否可能?还是我只能一次突出显示一个块? - penchant
5
我刚刚联系了Github支持,他们表示目前还不支持这个功能。他们说会考虑加入这个功能,但不能保证一定会实现。我提出的格式是类似于L18-L20,L29,并且人们可以通过CTRL点击添加非连续行。我认为你的想法是一个很好的建议,将会非常有用。 - broc.seib
2
如果READMEREADME.md呢? - zwcloud
显示剩余16条评论

89

broc.seib 的答案很高级,但我只想指出,GitHub 现在有一个非常简单的 UI 来帮助你获取永久链接,而不是按 Y 键获得。

  1. 通过单击行号选择一行或通过按住 Shift 键选择多个行(与在文件资源管理器中选择多个文件夹的方法相同):

    显示图片描述

  2. 在您选择的第一行的右上角,展开...并点击复制永久链接

    显示图片描述

  3. 就这样。选定的行和提交哈希的链接已复制到剪贴板中:

    https://github.com/python/cpython/blob/c82b7f332aff606af6c9c163da75f1e86514125e/Doc/Makefile#L1-L4


很不幸,这个...在提交的差异中没有显示出来。 - Dad

33

4
很棒的GIF! - Giovanni Benussi
抱歉题外话,您用什么工具制作的? - Giovanni Benussi
@GiovanniBenussi 这是来自 GitHub 的。请查看链接。 - Gayan Weerakutti
我是指那个gif的,哈哈哈。 - Giovanni Benussi
1
@GiovanniBenussi 我不知道reversiblean使用了什么,但有时我会使用一个很好的工具叫做“screentogif”制作gif动画,你应该试试 https://github.com/NickeManarin/ScreenToGif - SamGamgee
非常感谢@SamGamgee!! :-) - Giovanni Benussi

23

点击行号,然后复制并粘贴地址栏中的链接。要选择范围,请单击数字,然后按住 Shift 键单击后面的数字。

或者,链接的格式相对简单,只需将#L<number>附加到文件的链接末尾以获取特定行号。这是指向 git 存储库的 README 的第三行的链接:

https://github.com/git/git/blob/master/README#L3

突出显示的行和修改过的地址行的截图


3
不要忘记,如果文件发生更改,此URL仍将指向第3行,其中可能包含新代码,并且可能不是您想要的!我提供了另一种解决方案,可产生永久链接。提示:只需按“y”。;-) - broc.seib
5
链接失效。 - pmrotule

7
许多编辑器(也可以参见下面的“命令”部分)支持链接到GitHub或Bitbucket(或其他网站)文件的行号或范围。以下是一个简短的列表:

Atom

在GitHub上打开

Emacs

git-link

Sublime Text

GitLink

Vim

gitlink-vim


命令

  • git-link - 用于获取指向 Git 对象的存储库浏览器链接的 Git 子命令
  • ghwd - 打开与您的 Shell 当前分支和工作目录匹配的 GitHub URL

3

与如何将GitHub存储库的README.md文件链接到特定代码行有关

您有三种情况:

  1. We can link to (custom commit)

    But Link will always link to an old file version, which will not contain new updates in the master branch for example. Example:

    https://github.com/username/projectname/blob/b8d94367354011a0470f1b73c8f135f095e28dd4/file.txt#L10
    
  2. We can link to (custom branch) like (master-branch). But the link will always link to the latest file version which will contain new updates. Due to new updates, the link may point to an invalid business line number. Example:

    https://github.com/username/projectname/blob/master/file.txt#L10
    
  3. GitHub can not make an auto-link to any file either to (custom commit) nor (master-branch). Because of following business issues:

    • line business meaning, to link to it in the new file
    • length of target highlighted code which can be changed

很好有人指出了这点。但希望能找到一个妥协方案,例如绑定到行并在当前版本中向前跟踪,或者至少提供指向所需子字符串的链接。 - vintprox

1
如果您想要预览渲染一个Markdown代码片段,请按照其他答案中提到的方法复制链接之后,删除链接中的?plain=1参数。
例如,以下链接将显示纯文本链接:
github.com/<organization>/<repository>/blob/<branch_name>/README.md?plain=1#L14

在删除?plain=1参数后,它将显示代码的预览:
github.com/<organization>/<repository>/blob/<branch_name>/README.md#L14

一个带有预览的Markdown链接

查看GitHub文档:创建代码片段的永久链接获取更多信息。


链接到渲染后的Markdown文件(预览)对我无效。它会显示该文件,但不会滚动到所选行。 链接到原始文件(plain=1)有效。 有什么想法吗? - gruby karol
@grubykarol,由于在github.com上渲染markdown,无法链接到已渲染状态的行,但如果您或您想与之分享链接的人使用Chrome浏览器,有一个替代方法:在已渲染状态下,在选定的文本上使用复制高亮链接功能。 - manus

1

在GitHub Wiki页面上链接到行号

我曾经遇到过一些麻烦,不知道如何链接到GitHub Wiki页面上的特定位置,最后找到了解决方法。这可能是常识,但我不知道,其他人可能会觉得有用。

当浏览Wiki文件时,您可以将鼠标悬停在特定的标题文本上,链接图标将出现。单击此链接图标,您的浏览器导航URL将被更新(例如:https://github.com/user/repository/wiki/Test#title-1)。这将是指向Wiki文件中该特定位置的链接。

Enter image description here


1

对于拉取请求中的一行代码。

https://github.com/foo/bar/pull/90/files#diff-ce6bf647d5a531e54ef0502c7fe799deR27

https://github.com/foo/bar/pull/
90 <- PR number
/files#diff-
ce6bf647d5a531e54ef0502c7fe799de <- MD5 has of file name from repo root
R <- Which side of the diff to reference (merge-base or head). Can be L or R.
27 <- Line number

只要 L 和 R 正确,这将带您到一行。我不确定是否有访问 L 或 R 的方法。即,如果 PR 添加了一行,则必须使用 R。如果删除一行,则必须使用 L

来自:在 Github Pull Request 中生成行指针 URL


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