Względny link GitHub w pliku Markdown


831

Czy istnieje sposób na utworzenie kotwicy URL <a>, linku z pliku Markdown, do innego pliku w tym samym repozytorium i gałęzi (inaczej link do bieżącej gałęzi)?

Na przykład w gałęzi master mam plik README.md, który chciałbym zrobić coś takiego:

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

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

Pozwoliłoby mi to na linkowanie z jednego .md do drugiego w ramach tej samej gałęzi i nie musiałbym się martwić, w której gałęzi jestem (unikam konieczności tworzenia absolutnego adresu URL zawierającego nazwę gałęzi github.com).

Oto działający przykład tego, co mam na myśli:

  1. GOTO http://github.com/rynop/testRel , link nie działa.
  2. GOTO http://github.com/rynop/testRel/blob/master/README.md , link działa.

Jest to oczekiwane, ponieważ w tym momencie początkowy adres URL znajduje się w gałęzi. Jak mogę uzyskać bieżącą gałąź w pliku README.md w katalogu głównym repozytorium?

Aktualizacja : otworzyłem problem z GitHub dla tego żądania funkcji.


21
Wreszcie : obsługiwane są teraz linki względne! Zaktualizowałem swoją odpowiedź :)
— VonC

To są wszystkie dobre informacje, jeśli próbujesz otworzyć inny plik .md lub przejść do innej strony http / s lub html, a nawet .jpg, .png lub jpeg, ale jak sprawić, by Markdown otworzył plik .pdf? Nie mogę uzyskać poprawnej składni, aby mogła otworzyć mój plik .pdf, który znajduje się w tym samym katalogu, co plik .md. Czy ktoś może pomóc otworzyć .pdf?
— Elton,

Możesz znaleźć rozwiązania w tym pytaniu: stackoverflow.com/questions/40422790/…
— Oleg Pro

Odpowiedzi:


970

Aktualizacja 30 stycznia 2013 r. 16 miesięcy później:

GitHub Blog Post Względne linki w plikach znaczników :

Od dziś GitHub obsługuje względne łącza w plikach znaczników .
Teraz możesz łączyć bezpośrednio między różnymi plikami dokumentacji, niezależnie od tego, czy przeglądasz dokumentację w samym GitHub, czy lokalnie, używając innego mechanizmu renderowania znaczników.

Chcesz przykładów definicji linków i ich działania? Oto dla ciebie Markdown.
Zamiast linku bezwzględnego:

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

… Możesz użyć względnego linku:

[a relative link](other_file.md)

i upewnimy się, że zostanie powiązany user/repo/blob/branch/other_file.md.

Jeśli korzystasz z obejścia takiego jak [a workaround link](repo/blob/master/other_file.md), musisz zaktualizować dokumentację, aby użyć nowej składni.

Oznacza to również, że twoja dokumentacja może teraz łatwo stać sama, bez konieczności wskazywania GitHub .


Aktualizacja 20 grudnia 2011 r .:

Problem znaczników GitHub 84 jest obecnie zamknięty przez technoweenie , z komentarzem:

Próbowaliśmy dodać <base>do tego tag, ale powoduje to problemy z innymi względnymi linkami na stronie.


12 października 2011 r .:

Jeśli spojrzysz na surowe źródłoREADME.md samego Markdown (!), Ścieżki względne nie są obsługiwane.
Znajdziesz odniesienia takie jak:

[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

1
Hmm .. Mogę utworzyć względny adres URL (spróbuj [link] someDir / README.md, utworzy on kotwicę) - ale chcę, aby względny link rozpoznał gałąź github, taki jak: myRepo / tree / <$ curBranch> /pathToMd.md . Prawdopodobnie po prostu otworzę prośbę o dodanie funkcji na github.com
— rynop

1
nie. Zobacz pełny przykład tutaj github.com/rynop/testRel . Mógłbym zrobić względny link określający gałąź, ale to przeczy celowi tego, co próbuję zrobić w pierwszej kolejności. Gdybym łączył z .md w jednym podkatalogu do drugiego, myślę, że poradziłby sobie z linkiem względnym w porządku. Problem występuje podczas łączenia z .md w katalogu głównym repo.
— rynop

2
Powiązane: Do linkowania z jednej strony wiki do innej [Welcome](./wiki/Hello)działa, gdzie Hello to kolejna strona wiki w tym samym repozytorium.
— Wayne Bloss

1
@wizlb Właśnie wypróbowałem to bez ścieżki i działa również [Welcome](Hello)tam, gdzie Hello to kolejna strona wiki w tym samym repozytorium.
— Mottie

2
Działa to na zwykłych stronach wiki, ale jeśli dodasz plik _Sidebar.md, istnieje różnica między sposobem, w jaki łącza rozstrzygają się na stronie głównej wiki, niż w pozostałych stronach. Próbowałem tu wszystkiego bez powodzenia. Jedyne, co do tej pory wymyśliłem, to użycie 2 różnych plików _Sidebar.md i uporządkowanie plików w podkatalogach.
— NightOwl888

93

Na przykład masz repozytorium takie jak następujące:

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

Względny link do subtext.mdw text.mdmoże wyglądać następująco:

[this subtext](subpro/subtext.md)

Względny link do subsubtext.mdw text.mdmoże wyglądać następująco:

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

Względny link do subtext.mdw subsubtext.mdmoże wyglądać następująco:

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

Względny link do subsubtext2.mdw subsubtext.mdmoże wyglądać następująco:

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

Względny link do text.mdw subsubtext.mdmoże wyglądać następująco:

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

1
Jedna rzecz, którą znalazłem, w linkach rozróżniana jest wielkość liter, czego się nie spodziewałem.
— Andy Wiesendanger,

Co jeśli w moich katalogach są spacje?
— Rishav

16

Na dzień 31 stycznia 2013 r. Obniżka cen w Github obsługuje względne linki do plików .

[a relative link](markdown_file.md)

W tym wątku komentarza omówiono jednak kilka braków .

Alternatywnie możesz użyć Gitdown do zbudowania pełnych adresów URL do repozytorium, a nawet uświadomienia ich gałęzi, np

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

Gitdown to preprocesor przeceny GitHub. Usprawnia typowe zadania związane z utrzymywaniem strony dokumentacji dla repozytorium GitHub, np. Generowanie spisu treści, w tym zmiennych, generowanie adresów URL i uzyskiwanie informacji o samym repozytorium w momencie przetwarzania danych wejściowych. Gitdown bezproblemowo integruje się ze skryptami budynku.

Jestem autorem biblioteki Gitdown.


1
@Thomas Czy jest to część warunków użytkowania Przepełnienia stosu? Jeśli tak, udostępnij link. Jestem ciekawy motywacji takiego wymogu.
— Gajus

5
„Zamieszczaj dobre, trafne odpowiedzi, a jeśli niektóre (ale nie wszystkie) dotyczą twojego produktu lub strony internetowej, to w porządku. Musisz jednak ujawnić swoje powiązanie w swoich odpowiedziach.” stackoverflow.com/help/behavior
— Thomas

1
Można by pomyśleć, że mieści się to w metainformacjach, które Stack Overflow stara się tak bardzo unikać, tzn. Że promuje dyskusję poza tematem.
— Gajus

14

GitHub może to znacznie poprawić przy minimalnej pracy. Oto obejście.

Myślę, że chcesz czegoś bardziej podobnego

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

lub wskazać na sam plik README

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

Powodzenia


3
tak to właśnie robię dzisiaj. Nie chcę upiec informacji o oddziale w linku. To powinno być względne.
— rynop

8

Chciałem tylko to dodać, ponieważ żadne z powyższych rozwiązań nie zadziałało, jeśli docelowym linkiem jest katalog ze spacjami w nazwie. Jeśli docelowy link jest katalogiem i ma spację, to nawet ucieczka spacji za pomocą \ nie renderuje linku na Github. %20Dla każdego miejsca używa tylko rozwiązania, które mi odpowiada .

np .: jeśli jest to struktura katalogów

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

Aby Dir Aumieścić link do pliku README.md, Top_dirmożesz to zrobić:

[Dir 1](Cur_dir1/Dir%20A)

8

Możesz utworzyć link do pliku, ale nie do folderów, i pamiętaj, że Github doda /blob/master/przed odnośnikiem względnym (i folderom brakuje tej części, więc nie można ich połączyć, ani przy pomocy <a>tagów HTML , ani łącza Markdown).

Tak więc, jeśli mamy plik myrepo/src/Test.java, będzie miał adres URL taki jak:

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

Aby połączyć go w pliku readme, możemy użyć:

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

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

(Myślę, że masterreprezentuje mastergałąź i różni się, gdy plik znajduje się w innej gałęzi).


7

Możesz używać względnych adresów URL z katalogu głównego repozytorium za pomocą <a href="">. Zakładając, że Twoje repozytorium ma nazwę testRel, wstaw następujące polecenie 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>

3
ta niepoprawna składnia md
— astroanu

6

To pytanie jest dość stare, ale nadal wydaje się ważne, ponieważ nie jest łatwo umieścić odnośniki z readme.md na stronach wiki na Githubie.

Grałem trochę i ten względny link wydaje się działać całkiem dobrze:

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

Obaj ../usuną /blob/master/bazę i wykorzystają ją jako punkt wyjścia. Jednak nie próbowałem tego na innych repozytoriach niż Github (mogą występować problemy ze zgodnością).


4

Nie jestem pewien, czy widzę tę opcję tutaj. Możesz po prostu utworzyć /folderw swoim repozytorium i używać go bezpośrednio:

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

Nazwa obiektu blob, drzewa lub repozytorium nie jest potrzebna i działa jak urok.


1
Można by pomyśleć, że byłby to oczywisty sposób, ale dla mnie to nie działa.
— Kmeixner,

4

Jeśli chcesz względny link do swojej strony wiki na GitHub, użyj tego:

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

Jeśli chcesz link do pliku w repozytorium, powiedzmy, aby odwołać się do pliku nagłówka, a strona wiki znajduje się w katalogu głównym wiki, użyj tego:

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

Uzasadnieniem tego ostatniego jest pominięcie ścieżki „/ wiki” za pomocą „../” i przejście do gałęzi master w drzewie repozytorium bez podania nazwy repozytorium, która może ulec zmianie w przyszłości.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.