Относительная ссылка GitHub в файле Markdown - PullRequest
681 голосов
/ 05 октября 2011

Есть ли способ создать привязку URL, <a>, ссылку из файла Markdown, на другой файл в том же хранилище и ветви (или ссылку относительно текущей ветви)?

Например, в основной ветке у меня есть файл README.md, который я хотел бы сделать что-то вроде:

# My Project
is really really cool. My Project has a subdir named myLib, see below.

## myLib documentation
see documentation [here](myLib/README.md)

Это позволило бы мне ссылаться с одного .md на другой в той же ветви, а немне нужно беспокоиться о том, в какой ветке я нахожусь (не нужно указывать абсолютный URL-адрес, содержащий имя ветви github.com).

Вот рабочий пример того, что я имею в виду:

  1. GOTO http://github.com/rynop/testRel, ссылка не работает.
  2. GOTO http://github.com/rynop/testRel/blob/master/README.md, ссылка работает.

Это ожидается, потому что на этом этапе начальный URLнаходится в ветке.Как мне получить текущую ветку в файле README.md в корне хранилища?

Обновление : я открыл проблему для GitHubдля запроса этой функции.

Ответы [ 10 ]

791 голосов
/ 05 октября 2011

Обновление 30 января 2013 , 16 месяцев спустя:

Сообщение в блоге GitHub Относительные ссылки в файлах разметки :

Начиная с сегодняшнего дня, GitHub поддерживает относительные ссылки в файлах разметки .
Теперь вы можете связываться напрямую между различными файлами документации, независимо от того, просматриваете ли вы документацию на самом GitHub или локально, с помощью другого средства визуализации разметки.

Вам нужны примеры определений ссылок и как они работают? Вот вам какая-то уценка.
Вместо абсолютной ссылки:

[a link](https://github.com/user/repo/blob/branch/other_file.md)

… вы можете использовать относительную ссылку:

[a relative link](other_file.md)

и мы позаботимся о том, чтобы он был связан с user/repo/blob/branch/other_file.md.

Если вы использовали обходной путь, например [a workaround link](repo/blob/master/other_file.md), вам придется обновить документацию, чтобы использовать новый синтаксис.

Это также означает, что ваша документация теперь может легко стоять самостоятельно, не всегда указывая на GitHub .


Обновление от 20 декабря 2011 года:

Проблема разметки GitHub 84 в настоящее время закрыта technoweenie с комментарием:

Мы попытались добавить для этого тег <base>, но это вызывает проблемы с другими относительными ссылками на сайте.


12 октября 2011 г .:

Если вы посмотрите на необработанный источник README.md самой Markdown (!), Относительные пути не поддерживаются.
Вы найдете ссылки, такие как:

[r2h]: http://github.com/github/markup/tree/master/lib/github/commands/rest2html
[r2hc]: http://github.com/github/markup/tree/master/lib/github/markups.rb#L13
67 голосов
/ 27 марта 2017

Например, у вас есть репо, например:

project/
    text.md
    subpro/
       subtext.md
       subsubpro/
           subsubtext.md
       subsubpro2/
           subsubtext2.md

Относительная ссылка на subtext.md в text.md может выглядеть следующим образом:

[this subtext](subpro/subtext.md)

Относительная ссылка на subsubtext.md в text.md может выглядеть следующим образом:

[this subsubtext](subpro/subsubpro/subsubtext.md)

Относительная ссылка на subtext.md в subsubtext.md может выглядеть следующим образом:

[this subtext](../subtext.md)

Относительная ссылка на subsubtext2.md в subsubtext.md может выглядеть следующим образом:

[this subsubtext2](../subsubpro2/subsubtext2.md)

Относительная ссылка на text.md в subsubtext.md может выглядеть следующим образом:

[this text](../../text.md)
14 голосов
/ 22 ноября 2014

По состоянию на 31 января 2013 г. Github markdown поддерживает относительные ссылки на файлы .

[a relative link](markdown_file.md)

Однако есть несколько недостатков, которые обсуждались в этой ветке комментариев.

В качестве альтернативы вы можете использовать Gitdown , чтобы создать полные URL-адреса для хранилища и даже сделать их осведомленными о ветвлении, например

{"gitdown": "gitinfo", "name": "url"} // https://github.com/gajus/gitdown
{"gitdown": "gitinfo", "name": "branch"} // master

Gitdown - это препроцессор разметки GitHub.Он упрощает общие задачи, связанные с ведением страницы документации для репозитория GitHub, например, создание оглавления, включая переменные, генерацию URL-адресов и получение информации о самом репозитории во время обработки ввода.Gitdown легко интегрируется с вашими строительными скриптами.

Я являюсь автором библиотеки Gitdown.

12 голосов
/ 31 августа 2012

GitHub может сделать это намного лучше с минимальной работой.Вот обходной путь.

Я думаю, вы хотите что-то более похожее на

[Your Title](your-project-name/tree/master/your-subfolder)

или указать на самого README

[README](your-project-name/blob/master/your-subfolder/README.md)

Удачи

7 голосов
/ 13 сентября 2017

Просто хотел добавить это, потому что ни одно из вышеперечисленных решений не сработало, если целевой ссылкой является каталог с пробелами в имени. Если целевая ссылка - это каталог, и в нем есть место, то даже выход из пробела с \ не отображает ссылку на Github. Единственное решение, сработавшее для меня, использует %20 для каждого пробела.

например: если структура каталогов такая

Top_dir
|-----README.md
|-----Cur_dir1
      |----Dir A
           |----README.md
      |----Dir B
           |----README.md

Чтобы сделать ссылку на Dir A в README.md, представленном в Top_dir, вы можете сделать это:

[Dir 1](Cur_dir1/Dir%20A)
6 голосов
/ 19 мая 2018

Вы можете ссылаться на файл, но не на папки, и имейте в виду, что Github добавит /blob/master/ перед вашей относительной ссылкой (а папкам не хватает этой части, поэтому они не могут быть связаны ни с тегами HTML <a>, ни сСсылка на уценку).

Итак, если у нас есть файл в myrepo/src/Test.java, он будет иметь URL-адрес, подобный:

https://github.com/WesternGun/myrepo/blob/master/src/Test.java

И чтобы связать его в файле readme, мы можем использовать:

[This is a link](src/Test.java)

или: <a href="src/Test.java">This is a link</a>.

(я думаю, master представляет ветвь master и отличается, когда файл находится в другой ветке.)

6 голосов
/ 16 августа 2012

Вы можете использовать относительные URL из корня вашего репо с <a href="">. Предполагая, что вашему репо присвоено имя testRel, укажите в testRel/README.md следующее:

# My Project
is really really cool. My Project has a subdir named myLib, see below.

## myLib docs
see documentation:
    * <a href="testRel/myLib">myLib/</a>
    * <a href="testRel/myLib/README.md">myLib/README.md</a>
5 голосов
/ 17 февраля 2017

Этот вопрос довольно старый, но он все еще кажется важным, поскольку нелегко поместить относительные ссылки с readme.md на вики-страницы на Github.

Я немного поиграл, и эта относительная ссылка, кажется, работает очень хорошо:

[Your wiki page](../../wiki/your-wiki-page)

Два ../ удаляют /blob/master/ и используют вашибаза в качестве отправной точки.Однако я не пробовал это на других репозиториях, кроме Github (могут быть проблемы с совместимостью).

4 голосов
/ 22 октября 2013

Я не уверен, вижу ли я эту опцию здесь.Вы можете просто создать /folder в своем хранилище и использовать его напрямую:

[a relative link](/folder/myrelativefile.md)

Не нужно указывать имя BLOB-объекта, дерева или хранилища, и оно работает как шарм.

2 голосов
/ 05 января 2016

Если вы хотите относительную ссылку на вашу вики-страницу на GitHub, используйте это:

Read here: [Some other wiki page](path/to/some-other-wiki-page)

Если вы хотите, чтобы ссылка на файл в хранилище, скажем, ссылалась на какой-то заголовочный файл,и страница вики находится в корне вики, используйте это:

Read here: [myheader.h](../tree/master/path/to/myheader.h)

Обоснование последнего - пропустить путь "/ wiki" с помощью "../" и перейти к мастеру.ветвь в дереве хранилища без указания имени хранилища, которое может измениться в будущем.

...