👁️
pierreinside
  • Introduction
  • Workbench
    • VirtualBox
    • Linux
      • Linux-Paketverwaltung
      • Linux Initialisierung
      • Ubuntu 14.10 LTS
      • Ubuntu 16.04 LTS
      • Ubuntu 18.04 LTS
      • Ubuntu 20.04 LTS
      • Ubuntu - Netzwerk
    • Konsole
      • ssh
      • zsh
      • cygwin
      • Babun
      • terminator
      • Terminal Multiplexer
      • Linux Tools
    • awesome
    • Entwicklungsumgebungen
      • Texteditors
      • Visual Studio Code
      • IntelliJ - IDEA
  • Softwareentwicklungsprozess
    • Schätzungen
    • Eventstorming
    • OKR
  • Architektur
    • Uncle Bob
    • Microservices
    • NoSQL
      • ElasticSearch
    • Hystrix
    • Reactive Programming
    • AngularJS
    • Service Mesh
  • Networking
    • Dependency Injection
  • Programming
    • Java Core/EE
      • Java 8
      • Java Annotationen
      • Bean Validation
      • Enterprise Java Beans Specification
      • Dependency Injection
    • JRebel
    • Webservices
      • HTTP
      • REST
      • Spring MVC REST
      • Swagger
      • Postman
    • Spring Ecosystem
      • Spring Core
      • Spring Boot
        • Programming
        • Production Ready
        • Testing
      • Spring Cloud
      • Spring Cloud Config
      • Spring MVC
      • Spring Data
      • Spring Petclinic
    • NodeJS
    • UI-Technologie
      • Thymeleaf
      • ionic
      • Web Fonts
      • Jinja Templates
      • Twitter Bootstrap
    • Python Ecosystem
      • Python Libraries
      • Python Testing
      • Python Best-Practices
      • Python Snippets
      • Python Selenium
      • Kivy UI
      • FastAPI
      • Typer CLI
      • Django
    • Groovy
    • Persistenz
      • Transactions
        • Java TX
        • JPA TX
      • TX Handling
      • JPA
        • Eclipse Link
      • MySQL
        • MySQL Performance
        • Docker MySQL
      • Hazelcast
    • Glassfish
    • YAML
    • Angular
    • Camel
    • Zeichenkodierung
    • Kinder lernen Programmieren
  • Testen
    • Easymock
    • Mockito
  • Performance & Scalability
    • Java Performance
      • Heapdump Analysis
    • Java Concurrency
    • Instana
  • Sicherheit
    • Authentifizierung
      • OpenID Connect
      • Web-Authentication API
    • Authorisierung
      • OAuth
      • SAML
    • Spring Security
    • Zertifikate
    • Kali Linux
    • VPN
    • Zero-Trust-Networks
  • Build und Deployment
    • Maven
    • Bamboo
    • Jenkins
      • Jenkins Pipelines
      • Jenkins Pipelines Tips und Tricks
      • Jenkins-configuration-as-Code
      • Jenkins IDE
    • Travis CI
    • Shellprogrammierung
      • jq - JSON Parsing
    • Konfiguration Management
    • Vagrant
      • Vagrant-Ansible-Integration
      • Vagrant Box bauen
    • Ansible
      • Getting Started
      • Ansible Details
    • Saltstack
    • LinuxKit
    • Container
      • Docker
        • Docker Getting Started
        • Debugging Docker
        • Docker Build
        • Docker Registry
        • Docker run
          • docker run
          • docker network
        • Docker Compose
        • docker machine
        • Docker@Windows
        • Docker Host
        • Docker Scaling
        • Docker Ressources
        • Docker Logging
        • windowsContainer
      • Cloud Deployment Provider
        • AWS
          • Anwendungsdeployment
          • Workload
          • Permissions
          • Netzwerke
          • AWS CLI
            • aws-vault
          • RDS
          • Static Website Hosting
          • EKS - Elastic Kubernetes Service
          • S3
        • Google Cloud Platform
      • Docker Orchestrierung
        • CoreOS
        • Kubernetes
          • microK8s
          • minikube
          • autoscaler
          • Docker
          • k9s
        • Nomad
    • PHP
  • Operations
    • Proxy
      • NGINX
    • DNS
    • Logging
      • Graylog
      • Fluentd
    • Monitoring
      • Grafana
    • Infrastructure-as-Code
      • Terraform
        • AWS-Provider
        • GitHub-Provider
      • Packer
    • Deployment
      • Vault
      • Consul
        • Consul Template
      • Fabio
  • Rechtliches
    • Software-Lizenzen
  • Git Ecosystem
    • Git
      • Git Lifecycle Hooks
    • GitHub
      • GitHub Organizations
    • GitHub Actions
    • GitHub Pages
    • GitHub CLI
    • GitHub Copilot
    • GitHub-AWS OIDC
    • GitBook
    • GitLab
    • Bitbucket/Stash
  • Publishing
    • WordPress
    • Markdown
    • Static Site Generators
      • Hugo
      • Jekyll
    • Tiddly Wiki
    • Leanpub
    • Animationsfilme
  • Storage
    • Synology 2012
    • Synology 2021
  • Collaboration
    • Übersicht
    • Microsoft Teams
  • Konferenzen
    • Velocity Berlin 2019
  • IT mit Kindern
    • Projekt Sportstracker
    • Scratch
    • Pico Spielekonsole
  • Schule
    • Mathematik
  • Misc
    • Foto/Video
      • Foto/Video Sammlung bis 2023
        • Handbrake
        • Onedrive
      • Foto/Video Sammlung ab 2024
      • Gopro
      • Panasonic FZ1000 ii
        • als Webcam
      • AV Receiver
      • Videos erstellen
        • OBS Studio
        • Touch Portal
        • Game-Streaming
      • Kameratasche
      • Kamera 2020
    • Handy
      • 2016
      • 2018
      • 2019
      • 2021
      • 2022
    • Computer
      • Laptop
        • 2018
        • Chromebook
      • Monitor
        • 4k
      • Software
        • Command Line Interface
        • Google API
        • Plant UML
        • Chromium
        • Passwort-Manager
        • GPG
      • Dell CNF 2665 Farbdrucker
      • Dockingstation
      • Gaming PC 2021
      • Mobiles Büro
      • Mobiles Internet
      • Mobiler Router
    • Beamer Benq W1000+
    • Spielekonsole
      • 2017
        • Playstation 4
      • Pico Spielekonsole
    • Gadgets
      • iPad Pro 2015 und 2016
      • iPad Air 2024
      • Macbook Pro
      • Smartwatch
      • Slate
      • Mudi
    • Fahrrad
      • Jonas 2018
      • SQLab
    • Auto
      • Auto 2022
      • Camping
        • Camping Touren Ideen
          • Camping Tour - Gardasee 2021
        • Camper
          • Camper klein - keine Stehhöhe
            • VW Bus Erfahrungen
          • Camper gross - Stehhöhe
    • Haus
      • Klimaanlage
      • Swimming Pool
      • Quick Mill Orione 3000
      • Spülmaschine 2021
      • Hebe-Schiebetür
      • Gasgrill
      • Minibar / Mini-Kühlschrank
      • Glasfaseranschluss (Fiber-to-the-Home)
      • Smart-Home
        • Raspberry Pi
        • Heimnetzwerk
      • Homeoffice
      • Energie
        • Solar
        • Wärmepumpe
    • Freizeit
      • Musik Streaming
      • Sky
      • Online Lernplattformen
      • eScooter - ePowerFun
    • Fußball
      • Meine Arbeit als Fußball-Trainer
      • Fußball Tools
      • DFB Talentförderung
    • Google Impact Challenge
  • Englisch
Powered by GitBook
On this page
  • Login und PATs
  • Meine wichtigesten Use-Cases
  • GitHub Überblick
  • Shell Completion
  • Arbeit mit Pull Requests
  • Arbeit mit Gists
  • Konfiguration von Git
  • gh api
  • Konfiguration von gh

Was this helpful?

  1. Git Ecosystem

GitHub CLI

Anfangs habe ich die GitHub CLI gh nur für die Authentifizierung genutzt. Ich habe mich mit gh auth login angemeldet und konnte danach gh-Kommandos nutzen, ohne mich jedesmal neu anmelden zu müssen.

Nach einer Weile habe ich sie aber als Tool im Umgang mit Pull-Requests zu schätzen gelernt. Ich kann damit auf meinem Branch ganz leicht einen Pull-Request erstellen (gh pr create) und erhalte auch gleich eine URL ausgegeben, die ich an meine Kollegen weiterleiten oder selbst nutzen kann, um mir die Änderungen noch mal genauer anzusehen.

... ein nettes grafisches Tool (mit Mausbedienung) ist für gelegentliche Nutzung und den Einstieg wichtig - es ersetzt allerdings nicht die Kommandozeile für Power-User.


Login und PATs

PAT = Personal Access Token

Bei einem gh auth login erfolgt eine Authentifizierung interaktiv über den Webbrowser - die richtige Url wird automatisch im Browser geöffnet. Bei Headless Umgebungen muss man die Url https://github.com/login/device manuell im Browser öffnen und dann den ausgegebenen Code eingeben.

Die interaktiv eingegebenen Authentifizierungseinstellungen werden in ~/.config/gh/config.yml gespeichert. Nach erfolgter Authentifizierung wird ein PAT (Personal Access Token) erzeugt und lokal gespeichert (~/.config/gh/hosts.yml) - mit gh auth logout kann man ihn löschen. Dieser Token wird für alle weiteren gh-Kommandos verwendet. Ich kann mir den Token auch per gh auth token ausgeben lassen und ihn beispielsweise explzit in aufrufen in dieser Form verwenden:

GITHUB_TOKEN=`gh auth token`
gh api https://does_not_matter:$\{GITHUB_TOKEN\}@api.github.com/repos/....

Meine wichtigesten Use-Cases

GitHub Überblick

  • gh status - Zeigt den Status des GitHub-Accounts an

    • sehr praktisch, wenn man schauen will wie der Status der PRs ist (welche muss ich reviewen, welche sind noch offen, etc.)

Shell Completion

  • gh completion --shell zsh - Shell Completion für zsh

Arbeit mit Pull Requests

  • gh pr create - Erstellt einen Pull-Request in den Default Branch

  • gh pr create --base my_target_branch - Erstellt einen Pull-Request in den angegeben Target-Branch

  • gh pr list - Zeigt alle Pull-Requests an

  • gh pr status - Zeigt den Status des aktuellen Pull-Requests an

  • gh pr checkout 119 - Wechselt auf den Branch des Pull-Requests mit der Nummer 119

  • gh pr diff - Zeigt die Änderungen des aktuellen Pull-Requests an

Arbeit mit Gists

  • gh gist create gists/gh-cli-install.yml - Erstellt ein Gist aus einer Datei


Konfiguration von Git

Verwendet man die git-CLI, so kann gh als Credential Helper per

gh auth setup-git

konfigurieren. Dabei wird die ~/.gitconfig um Zeilen dieser Art erweitert:

[credential "https://github.com"]
    helper =
    helper = !/usr/bin/gh auth git-credential
[credential "https://gist.github.com"]
    helper =
    helper = !/usr/bin/gh auth git-credential

Bei jedem git-Kommando wird dann automatisch der Personal-Access-Token (PAT) von gh auth login wiederverwendet.


gh api

wenn die Response kein JSON liefert, dann einfach mal mit den Headers probieren: --header Accept:application/vnd.github+json --header X-GitHub-Api-Version:2022-11-28

GitHub bietet schon recht gute Tools und erweitert diese ständig, doch manche Dinge muss ich dann doch noch selbst über die REST oder GraphQL coden. Hierzu ist gh api das mittel der Wahl.

Der für einen Workflow automatisch generierte GITHUB_TOKEN hat nur sehr eingeschränkte Rechte, die evtl. für die Verwendung der REST-API nicht ausreichend ist. Hier sollte man sich bei Bedarf über eine GitHub App einen passenden Token generieren lassen.

Mit jq lässt dich die JSON Response sehr gut parsen.


Konfiguration von gh

Auf meinem Ubuntu befindet sich die Konfiguration in ~/.config/gh/config.yml. Dort kann ich beispielsweise die Alias-Kommandos konfigurieren:

aliases:
   co: pr checkout
PreviousGitHub PagesNextGitHub Copilot

Last updated 1 year ago

Was this helpful?