Relative Link to Repo's Root from Markdown file - github

I need to have a relative link to root of my repo from markdown file
(I need it working for any forks)
So it looks like the only way it's to provide a link to some file in the root:
the [Root](/README.md)
or
the [Root](../README.md)
(if it's located at /doc/README.md for instance)
At the same time I can refer to any folder without referring to a file
the [Doc](/doc)
But if I try to put a link to the root folder:
the [real root](/)
the [real root](../)
I'll have a link such
https://github.com/UserName/RepoName/blob/master
which unlike the
https://github.com/UserName/RepoName/blob/master/doc
refers to 404
So if I don't want to refer to README.md in the root (I could havn't it at all)
Is there any way to have such a link?

After some research I've found this solution:
[the real relative root of any fork](/../../)
It always points to the default branch. For me it's Ok, so it's up to you
PS
With such a trick you can also access the following abilities:
[test](/../../tree/test) - link to another branch
[doc/readme.md](/../../edit/master/doc/readme.md) - open in editor
[doc/readme.md](/../../delete/master/doc/readme.md) - ask to delete file
[doc/readme.md](/../../commits/master/doc/readme.md) - history
[doc/readme.md](/../../blame/master/doc/readme.md) - blame mode
[doc/readme.md](/../../raw/master/doc/readme.md) - raw mode (will redirect)
[doc/](/../../new/master/doc/) - ask to create new file
[doc/](/../../upload/master/doc/) - ask to upload file
[find](/../../find/test) - find file

You can either link directly to the file (../README.md), or simply use a full absolute URL to link directly to the repo root: https://github.com/UserName/RepoName
Using relative links doesn't work so well on GitHub. Notice the difference between the following two URLs:
https://github.com/UserName/RepoName/tree/master/somedir
https://github.com/UserName/RepoName/blob/master/somedir/somefile
Notice that the first points to a directory and the second points to a file. Yet, after the "RepoName" we have either one of tree (for a directory) or blob for a file. Therefore relative links between the two won't work properly. On GitHub, you can't use relative links to link between a file and a directory. However, you can link between two files (as both URLs contain blob). Therefore, if you wanted to link from somefile back to README.md in the root, you could do:
[README](../README.md)
That would give you the URL:
https://github.com/UserName/RepoName/blob/master/somedir/../README.md
which would get normalized to
https://github.com/UserName/RepoName/blob/master/README.md
However, if you just want to point to the root of your Repo (or any other dir), then it is probably best to use a full URL. After all, if someone has downloaded your repo and is viewing the source locally, the relative URL to the Repo root will be different than when viewing the file on GitHub. In that case, you probably want to point them to GitHub anyway. Therefore, you should use:
[root](https://github.com/UserName/RepoName)
Another advantage of that is that if your documentation ever gets published elsewhere (perhaps a documentation hosting service), the link will still point to the GitHub repo, not some random page on the hosting service. After all, the README at your project root is not likely to get included with the contents of the docs/ dir on said hosting service.
Perhaps it would help to understand how GitHub's URL scheme presumably works. I say "presumably" as I have no inside knowledge, just a general understanding of how these types of systems are generally designed.
GitHub is not serving flat files. Rather their server is taking the URL apart, and uses the various pieces to return the proper response. The URL structure looks something like this:
https://github.com/<username>/<repository name>/<resource type>/<branch>/<resource path>
The username, repository name, resource type, and branch are rather arbitrary and just ways to GitHub to ensure they are pulling information from the correct location.
The resource type matters as they are likely not pulling files from a working tree. Rather they are pulling the files/directory listings directly from the Repo itself through a lower level. In that case, obtaining a file is very different than obtaining a directory listing and requires a different code path. Therefore, you can't request a blob (file) with aresource path that points to a tree (directory) or visa versa. The server gets confused and returns an error.
The point is that GitHub's server works on a slightly different set of rules. You can use relative URLs to move around within the resource path part of the URL, but once you change the resource type in the resource path part of the URL, then GitHub's entire scheme is broken if you don't also change the resource type in the URL. However, browsers (or HTML or Markdown) have no knowledge about that and relative URLs don't compensate for that. Therefore, you can't reliably use relative URLs to move around within a GitHub repo unless you understand all of the subtleties. Sometimes its just better to use absolute links.

Related

Is it possible to use nested links in Markdown -> to use in github

I would like to find a way to use nested url links in markdown (or a simple code) to be able to:
have a reference file in GitHub (reference.md) containing all the links that I cite several times in several *.md files in my repository. This to be able to correct broken links in one place without having to crosscheck all my files. Is this possible?
ex:
reference.md file contains: [citat1]:url
files 1.md...2.md..n.md contain code meaning something like: [citat1](lookup and use the url given in reference.md)
so if I click on citat1 on the generated webpage from the different files 1...2 the link would be active and redirect me to the appropriate url.
Anyone can help or point in the right direction? thanks

How do I make make multiple pages?

I created a repository with the name username.github.io (Used my username). Does the case (a-A) matter? I made it with lowercase letters then renamed it to the exact casing.
If I have to make the repository with the name "username.github.io", how do I setup multiple pages?
I'm going to http://username.github.io and I don't see anything.
According to the docs (step #5), the first time you do this it'll take a couple of minutes to show up. Also, you have to be sure that the name of the repository exactly matches your username on GitHub, including case.
For multiple pages, just make multiple HTML files (or whatever) in the root of your repository.
1-Beacuase of dns propagation delay it takes a while for your site to show up.
2-To create a page just create an html file in root directory of your repo. also you can create it inside any other path then you can access it via :
username.github.io/anyotherpath/page.html
3-You can also use jekyll which is static site generator written in Ruby.

wget page and insert source domain

I'm attempting to create a short script to cache a dynamically generated web page on another server.
I only want the one page so using
wget http://domain/file
Could be enough but the file contains relative links, which arent valid on the host.
Any ideas of an easy way to replace the relative links with absolute ones pointing to the original server/domain?
You are looking for the -k option:
Downloaded files will be changed to refer to the file they point to as a relative link.
Not downloaded files will be changed to include host name and absolute path of the location they point to.

Embedding images inside a GitHub wiki (gollum) repository?

The Github wikis are backed by a separate git repository then the main project repository.
This post by the Github team makes it sound like you should be able to link to images stored in the wiki repository inside the wiki markup.
Images and Folders
You can now reference images hosted inside the Git repository.
I've checked out my wiki's repository and pushed a resource folder and an image into it. My question is, how do I go about using this image?
Is this even possible or have I misunderstood something?
For viewers wishing to view images on a github wiki I've found the following method to work:
Go to the "Git Access" tab inside the wiki page of your repository and retrieve the SSH path which should be some thing like: git#github.com:USER/REPO.wiki.git where USER is your account name and REPO is the repository name.
On your local machine use whichever Git command line tool you wish to cd into your local directory of choice and get the repository via
git clone git#github.com:USER/REPO.wiki.git
Now within this repository create an image directory, I'll call it "images" and put whatever images you want into the directory
And then push your wiki git directory to github
You will not be able to physically see the images in say the "Pages" tab, but if you simply reference the images in a local link you should be able to see them. Example with Markdown below:
![Alt attribute text Here](images/YOURIMAGE.ext)
You may also embed the image as a link itself by wrapping it further like so:
[![Alt attribute text Here](images/YOURIMAGE.ext)](http://Yoursite.com)
You can also add subdirectories within your local copy to help organize the wiki since the "pages" tab simply lists them out. Keep in mind, however, that even when the new directory is pushed the "pages" tab doesn't list the directory.
To use relative paths do:
[[foo.jpg]]
For more info, see the demo wiki's page on images.
None of answers seem to work when adding an image in readme.md. I've got a solution though:
If the URL of the image is:
https://github.com/Username/Repository-Name/blob/master/Directory-Inside-Repository/image.png
Replacing blob with raw gives you the URL of the raw image:
https://github.com/Username/Repository-Name/raw/master/Directory-Inside-Repository/image.png
Now, you'd embed the image using normal markdown:
![Image Alt](https://github.com/Username/Repository-Name/raw/master/Directory-Inside-Repository/image.png)
UPDATE: As of now, GitHub also serves raw images from a different sub-domain raw.github.com. So, you can also use:
https://raw.github.com/Username/Repository-Name/master/Directory-Inside-Repository/image.png
EXAMPLE: https://raw.github.com/Automattic/liveblog/master/screenshot-1.png
Relative path work for me like this:
home page of the wiki:
![text](wiki/images/someimage.png)
sub page of the wiki:
![text](images/someimage.png)
Note that when doing a preview the image will not show, I had save it.
If you want to quickly upload an image with drag/drop, you can perform the following (albeit hackish):
Create a dummy issue; drag & drop your image there; copy/paste the uploaded markdown image code to your wiki;
After you create the issue once, you can use it any number of times to do this.
Hope this helps anyone looking for a quick fix, without needing to have the image reside in the repo.
Here is a practical way to do it:
Go to any issue on github
In the comment section you can attach files, just drag/drop, select or paste your image
Copy the code/link displayed in the textarea
Paste it in the wiki
Profit !
You don't even have to create or modify any issue compared to #tiby solution !
Figured it out.
The url is formatted as follows
https://raw.github.com/wiki/username/project/pathtoimage/imagename.extension
pathtoimage is optional
James' URL format did not work for me, perhaps it has been changed. I have used:
https://github.com/username/project/wiki/pathtoimage/image.extension
Where pathtoimage is optional.
Finally got the images into repository using the method described by nerdwin and got them to display in the wiki using ![test](test.jpg)
The following markdown will reference an image in your GitHub repo from within your corresponding GitHub wiki
![My Alt Text](../blob/master/Path/ToAsset/In/Repo.png?raw=true)
The above example assumes that you have the following file structure in your repo
Path
ToAssets
In
Repo.png
For a real world example, if I wanted to reference this image in github from the corresponding wiki, I'd use this markdown
![Azure App Settings](../blob/master/TrelloWorld/TrelloWorld.Server/Assets/Azure_AppSettings.png?raw=true)
Caveats
Case matters
If you are on the special Home page of the wiki, you do not need to go up a level with the ../ In my example above, the correct link would be
For Home Page:
![Azure App Settings](blob/master/TrelloWorld/TrelloWorld.Server/Assets/Azure_AppSettings.png?raw=true)
Use the relative path
the Wiki is located at [repositoryname]/wiki
The files in the repository are located at [repositoryname]/raw/master/[file path in repository]
So just use the relative path: ../raw/master/[file path in repository]
I put both images and PDFs in my wikis. I clone the wiki and add an images and a files directory, then use the following markdown to embed image links and add file links:
Images:
[[/images/path/to/image.ext|ALT TEXT]]
The leading slash isn't necessary if your wiki pages are all at the root level, but I use subdirectories and an absolute path resolves correctly and keeps things simple.
Files:
[link text](files/path/to/file.ext "ALT TEXT")
Note, no leading slash for the wiki files path to resolve correctly as a link in this format.
I documented this with more detail in a GitHub gist
Since Feb. 2022, you can simply drag and drop, select or paste the file.
That will upload the image to your Wiki pages, and store it in https://user-images.githubusercontent.com
To embed an external image thumbnail, use the following,
![Image](<external link to the image>)
The comment from #Drew Noakes to the original question did it for me:
The syntax for the image I wanted to be displayed:
[[/images/imageName.png]]
This image was only displayed when renaming:
wikiPage.md --> wikiPage.wiki
The following folder structure was used in the wiki repository:
repository.wiki
|--wikiPage.wiki
|--images
|--imageName.png
BUT:
The syntax in .wiki differs from .md files.
Many of the answers didn't work for me, here's what finally worked:
![](../raw/master/Images/ImportantImage.png)
Using the "Markdown" editor mode and a sub-page such as:
https://github.com/project/repo/wiki/MyPage

GitHub relative link in Markdown file

Is there a way to create a URL anchor, <a>, link from within a Markdown file, to another file within the same repository and branch (aka a link relative to the current branch)?
For example, in the master branch I have a README.md file, which I would like do something like:
# My Project
is really really cool. My Project has a subdir named myLib, see below.
## myLib documentation
see documentation [here](myLib/README.md)
This would allow me to link from one .md to another within the same branch and not have to worry about which branch I'm in (avoid having to do an absolute URL that includes the github.com branch name).
Here is a working example of what I mean:
GOTO http://github.com/rynop/testRel, link does not work.
GOTO http://github.com/rynop/testRel/blob/master/README.md, link works.
This is expected because at this point the starting URL is in the branch. Now how do I get it to pick up the current branch in the README.md at the root of the repository?
Update: I opened an issue against GitHub for this feature request.
Update 30th, January 2013, 16 months later:
GitHub Blog Post Relative links in markup files:
Starting today, GitHub supports relative links in markup files.
Now you can link directly between different documentation files, whether you view the documentation on GitHub itself, or locally, using a different markup renderer.
You want examples of link definitions and how they work? Here's some Markdown for you.
Instead of an absolute link:
[a link](https://github.com/user/repo/blob/branch/other_file.md)
…you can use a relative link:
[a relative link](other_file.md)
[a relative link](path%20with%20spaces/other_file.md)
and we'll make sure it gets linked to user/repo/blob/branch/other_file.md.
If you were using a workaround like [a workaround link](repo/blob/master/other_file.md), you'll have to update your documentation to use the new syntax.
This also means your documentation can now easily stand on its own, without always pointing to GitHub.
Marcono1234 adds in the comments
Also useful: When the link starts with a /, it is relative to the root of the repository (regardless of whether the markdown file is nested in subdirectories)
Update December 20th, 2011:
The GitHub markup issue 84 is currently closed by technoweenie, with the comment:
We tried adding a <base> tag for this, but it causes problems with other relative links on the site.
October 12th, 2011:
If you look at the raw source of the README.md of Markdown itself(!), relative paths don't seem to be supported.
You will find references like:
[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
As noted in InvisibleWolf's answer, if the target link is a directory and it has space, then you need to use %20 for each space.
For example, you have a repo like the following:
project/
text.md
subpro/
subtext.md
subsubpro/
subsubtext.md
subsubpro2/
subsubtext2.md
The relative link to subtext.md in text.md might look like this:
[this subtext](subpro/subtext.md)
The relative link to subsubtext.md in text.md might look like this:
[this subsubtext](subpro/subsubpro/subsubtext.md)
The relative link to subtext.md in subsubtext.md might look like this:
[this subtext](../subtext.md)
The relative link to subsubtext2.md in subsubtext.md might look like this:
[this subsubtext2](../subsubpro2/subsubtext2.md)
The relative link to text.md in subsubtext.md might look like this:
[this text](../../text.md)
GitHub could make this a lot better with minimal work. Here is a work-around.
I think you want something more like
[Your Title](your-project-name/tree/master/your-subfolder)
or to point to the README itself
[README](your-project-name/blob/master/your-subfolder/README.md)
As of January 31, 2013 Github markdown supports relative links to files.
[a relative link](markdown_file.md)
However, there are a few deficiencies that have been discussed in this comment thread.
As an alternative, you can use Gitdown to construct full URLs to the repository and even make them branch aware, e.g.
{"gitdown": "gitinfo", "name": "url"} // https://github.com/gajus/gitdown
{"gitdown": "gitinfo", "name": "branch"} // master
Gitdown is a GitHub markdown preprocessor. It streamlines common tasks associated with maintaining a documentation page for a GitHub repository, e.g. generating table of contents, including variables, generating URLs and getting information about the repository itself at the time of processing the input. Gitdown seamlessly integrates with your building scripts.
I am the author of the Gitdown library.
Just wanted to add this because none of the above solutions worked if target link is directory with spaces in it's name. If target link is a directory and it has space then even escaping space with \ doesn't render the link on Github. Only solution worked for me is using %20 for each space.
e.g.: if directory structure is this
Top_dir
|-----README.md
|-----Cur_dir1
|----Dir A
|----README.md
|----Dir B
|----README.md
To make link to Dir A in README.md present in Top_dir you can do this:
[Dir 1](Cur_dir1/Dir%20A)
You can link to file, but not to folders, and keep in mind that, Github will add /blob/master/ before your relative link(and folders lacks that part so they cannot be linked, neither with HTML <a> tags or Markdown link).
So, if we have a file in myrepo/src/Test.java, it will have a url like:
https://github.com/WesternGun/myrepo/blob/master/src/Test.java
And to link it in the readme file, we can use:
[This is a link](src/Test.java)
or: This is a link.
(I guess, master represents the master branch and it differs when the file is in another branch.)
You can use relative URLs from the root of your repo with <a href="">. Assuming your repo is named testRel, put the following in testRel/README.md:
# My Project
is really really cool. My Project has a subdir named myLib, see below.
## myLib docs
see documentation:
* myLib/
* myLib/README.md
This question is pretty old, but it still seems important, as it isn't easy to put relative references from readme.md to wiki pages on Github.
I played around a little bit and this relative link seems to work pretty well:
[Your wiki page](../../wiki/your-wiki-page)
The two ../ will remove /blob/master/ and use your base as a starting point. I haven't tried this on other repositories than Github, though (there may be compatibility issues).
In .md file when you want to create a link to any related files which is related to same project folder or URL based links:
Existing file link:
In .md file add showing name in [] box then open () in this box add / after that it will auto fetch all existing folders name form which you choose your folder then add '/' it will show inner file or 'folders`. This means it will auto fetch the paths and at the end, your URL is created.
Example:
[Enter Showing Name](/users/4000266/heysushil)
This line show like this:
Enter Showing Name
Add URLs on .md file
Follow the same process only change the () box path with URL like this:
[HeySushil - YouTube](https://youtube.com/heysushil)
This looks like HeySushil - YouTube
Note: Remember no need to add force manually after adding / on () box it will auto fetch all existing folders and files.
I am not sure if I see this option here. You can just create a /folder in your repository and use it directly:
[a relative link](/folder/myrelativefile.md)
No blob or tree or repository name is needed, and it works like a charm.
If you want a relative link to your wiki page on GitHub, use this:
Read here: [Some other wiki page](path/to/some-other-wiki-page)
If you want a link to a file in the repository, let us say, to reference some header file, and the wiki page is at the root of the wiki, use this:
Read here: [myheader.h](../tree/master/path/to/myheader.h)
The rationale for the last is to skip the "/wiki" path with "../", and go to the master branch in the repository tree without specifying the repository name, that may change in the future.
The behaviour in Github directory links in markdown files could create some headaches.
All files have an url are starting with blob,
blob/<branch>/<path>/<fileName>
whereas directories have an url starting with tree:
tree/<branch>/<path>
So no relative link to a directory should work. It points to an url that starts with a blob. Magically Github changes some relative path automatically to the tree path. Unfortunately not urls containing ".."
I investigate some time to examine the strange behaviour with Github directory links on https://github.com/fluentcodes/GitSamples-GIT/tree/github-readme-links.
Just follow the format below.
[TEXT TO SHOW](actual URL to navigate)
Here is what I found for relative links in github's .md files:
Relative links without ../ (aka. link to file in the same level, or in sub dir), seems always work.
Relative links that contains ../ works only when you are already in a page whose url contains substring /blob/.
Otherwise need to use full url that contains /blob/, to link.
Actually except top level /README.md, when view any other files, their url already contains /blob/.
Thus probably you can always use relative links that contains ../ in files, except /README.md.
But /README.md is in top level, thus it shouldn't need a relative link that contains ../.
So, you should never need a full path link (that contains github domain) to link to files in the same github repo.
Example (links among multiple language doc)
In /README.md, can use relative links without ../.
[中文](doc/cn/README.md) |
[日本語](doc/jp/README.md)
In /doc/cn/README.md, since when we view it, the url already contains /blob/, thus could use relative links with ../.
[English](../../README.md) |
[日本語](../jp/README.md)
(BTW, the example come from this git-merge-flow repo.)
What I found to work for relative folders:
[link text](subfolder/subsubfolder/relevantfolder/)
where relevant folder is the folder you are trying to link to. The backslash is needed after the folder name. I tried including the project name and tree/main in the path and the other things suggested in previous answers, that lead to a nonexistent page error. The subfolder is a folder within the overall repo project folder.
Thus, file links would be in the form of:
[link text](subfolder/subsubfolder/relevantfolder/index.html)
If the desired file is not in any folder or subfolder the link is simply:
[link text](README.md)
for example the README file is not in any subfolders, so that could be the exact relative link you use for the README file.
You can also insert your links (relative or absolute) at the bottom to reduce clutter in text.
It can also be a good option for repetitive links.
This is [my linked text].
[my linked text]: relative/path/in/repo/to/file.txt "Optional title for mouse hover"
This is my linked text.