Github: Difference between revisions

From wikinotes
 
(12 intermediate revisions by the same user not shown)
Line 1: Line 1:
Github is a website that provides free public hosting of opensource projects.<br>
Github is a website that provides free public hosting of [[git]] repositories.<br>
It also provides other features like documentation hosting, issue tracking etc.
It also provides other features like documentation hosting, issue tracking etc.


Line 6: Line 6:
{| class="wikitable"
{| class="wikitable"
|-
|-
| RESTAPI-v3 docs || https://developer.github.com/v3/
| official docs || https://docs.github.com/en
|-
| home || https://github.com/
|-
|-
|}
|}
Line 13: Line 15:
= Notes =
= Notes =
<blockquote>
<blockquote>
{| class="wikitable"
{|  
|-
| [[github api]]
|-
|-
| [[github ui]]
| [[github ui]]
Line 19: Line 23:
| [[github git]]
| [[github git]]
|-
|-
| [[github api]]
| [[github actions]]
|-
|-
| [[github markdown]]
| [[github markdown]]
Line 26: Line 30:
</blockquote><!-- Notes -->
</blockquote><!-- Notes -->


= Common Tasks =
= Tools =
<blockquote>
<blockquote>
== Github push/pull with SSH key ==
{|
<blockquote>
You'll need to change the github URL you are using.
 
<syntaxhighlight lang="bash">
git clone https://github.com/<Username>/<Project>  # !!bad!!
 
git clone git@github.com:<Username>/<Project>      # good
git clone github.com:<username>/<project>          # also good (must specify user in ~/.ssh/config)
</syntaxhighlight>
 
You can quickly test authentication
<source lang="bash">
ssh git@github.com -i ~/.ssh/github
</source>
</blockquote><!-- github push/pull with ssh key -->
 
== importing existing git repo ==
<blockquote>
 
See [[git httpserver|hosting a git http server]] to share with github.
 
You can then use that to import your project.
 
</blockquote><!-- importing an existing repo -->
 
== deploy keys ==
<blockquote>
you can generate keys to provide read-only, or read-write access to a repo.
 
<source lang="bash">
ssh-keygen -t ed25519  # a strong key
</source>
 
<source lang="yaml">
https://github.com/<you>/<repo>/settings/keys/new  # url to add new deploykey
</source>
 
next we'll create entries within our ssh config for the repo.
 
Create an `alias` for github.com, that will identify which deploykey you'll
be using here.
<source lang="ini">
Host <alias-for-your-repo>  github.com
    HostName github.com
    IdentityFile  /home/you/.ssh/deploykey
    User git
</source>
 
 
Finally, clone the git repository using your alias instead of github.com.
<source lang="bash">
git clone <alias-for-your-repo>:<you>/<repo>
</source>
 
{{ NOTE |
Your alias must be a word, not a full address. Some examples:
 
* git will not recognize <code>myrepo:/you/myrepo</code> as an alias
* your alias cannot resolve to your repo ex: <code>git clone {alias}</code> is not sufficient. You will need to use <code>git clone {alias}:you/repo</code>.
}}
</blockquote><!-- deploy keys -->
 
== download single file ==
<blockquote>
<source lang="bash">
curl -O wget https://raw.githubusercontent.com/user/project/branch/filename
</source>
</blockquote><!-- download single file -->
</blockquote><!-- common tasks -->
 
= Github Actions =
<blockquote>
{| class="wikitable"
|-
|-
| expression syntax || https://docs.github.com/en/free-pro-team@latest/actions/reference/context-and-expression-syntax-for-github-actions
| [[git]]
|-
|-
|}
| [[gh]]
</blockquote><!-- github actions -->
 
= PR magic =
<blockquote>
== fixes/closes ==
https://help.github.com/en/github/managing-your-work-on-github/linking-a-pull-request-to-an-issue
 
 
</blockquote><!-- PR magic -->
 
= Firewall =
<blockquote>
== Getting github.com ip-address ==
github uses an unconventional setup for it's ip-addresses. Simply using a hostname resolves to just one of their
possible servers. If you are creating firewall rules, you'll need to create them for each address range. Here is
some code I've used to do this successfully in the past.
 
{{ expand
| python script to get github address ranges
|
<source lang="python">
import sys
import json
import os
 
if sys.version_info[0] < 3:
    from urllib2 import urlopen
else:
    from urllib.request import urlopen
 
 
def get_github_urls():
    """
    Returns:
        list: ``[ '1.2.3.4/24', ... ]``
    """
    url = 'https://api.github.com/meta'
    reply = urlopen(url)
 
    if sys.version_info[0] < 3:
        status = reply.code
    else:
        status = reply.status
    if status != 200:
        raise RuntimeError('Unexpected reply: {}'.format(repr(reply)))
 
    # decode
    rawdata = reply.read().decode('utf-8')
    data = json.loads(rawdata)
 
    return data['git']
</source>
}}
 
See
{|
| stackoverflow question || https://superuser.com/questions/704230/what-ports-to-open-up-for-github-to-install-and-work
|-
|-
| official docs on githug ip-addrs || https://help.github.com/en/articles/about-githubs-ip-addresses
| [[github-searcher-cli]]
|}
</blockquote><!-- firewall -->
 
 
= Tips/Tricks =
<blockquote>
 
== Find PR from commit ==
<source lang="bash">
git log --merges --ancestry-path --oneline 9c34e5f6af..master \
    | grep 'pull request' \
    | tail -n1 \
    | awk '{print $5}' \
    | cut -c2- \
    | xargs gh pr view -w
</source>
 
<source lang="bash">
# alternatively:
git describe --all --contains <commit>  # returns branch name
 
</source>
</blockquote><!-- tips/tricks -->
 
= 3rd Party Tools =
<blockquote>
{|
| [[gh]] || official commandline client for github
|-
|-
| [[github-searcher-cli]] || search github from the commandline
| [[gh-search-cli]]
|-
|-
| [[gh-search-cli]] || search github from the commandline
|}
|}
 
</blockquote><!-- Tools -->
</blockquote><!-- 3rd party tools -->

Latest revision as of 15:54, 19 September 2021

Github is a website that provides free public hosting of git repositories.
It also provides other features like documentation hosting, issue tracking etc.

Documentation

official docs https://docs.github.com/en
home https://github.com/

Notes

github api
github ui
github git
github actions
github markdown

Tools

git
gh
github-searcher-cli
gh-search-cli