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.