====== GIT und Github ====== Im Labor wird [[http://www.contiki-os.org|Contiki]] für die Programmierung von Mikrocontrollern verwendet. Dazu wurde ein [[https://github.com/tscheffl/contiki|Fork]] des [[https://github.com/contiki-os/contiki| offiziellen Repositories]] erstellt, um eigene Entwicklungen entwickeln und hosten zu können. Dem Repository werden eigene Branches hinzugefügt. Davon wird jeweils einer in Github als Default markiert. Das eigene Repo wird in unregelmäßigen Abständen mit dem offiziellen Repo synchronisiert. Dazu wird eine neue Kopie des eigenen Branches angefertigt und ein rebase nach ''HEAD'' durchgeführt. Somit sollten eigene Entwicklungen aktuell gehalten werden. Dazu fehlen momentan noch automatisierte Tests (Travis?), welche sicherstellen, dass sich alle eigenen Entwicklungen auch kompilieren lassen. ===== Quellcode herunterladen ===== git clone https://github.com/tscheffl/contiki cd contiki git status ===== Allgemeine Befehle ===== Herausfinden, mit welchen Remotes das lokale Repository verbunden ist. git remote git remote show upstream git remote show origin Zeigt lokale Branches (-vv für tracking & remote): git branch -vv Anzeigen der Geschichte des Projekts: git log git log --oneline --decorate --graph Änderungen abspeichern: git add # muss man nach jeder Änderung machen! -> alternativ git add -u # fügt alle geänderten Dateien hinzu git commit -m "" # Lokales Commit (kann noch geändert werden) git push # (Final) Änderungen auf Server pushen ===== Branches ===== **Erzeugen** eines neuen Branches und nach Remote pushen (-u - tracking): git checkout -b git push -u origin **Löschen** eines nicht mehr benötigten Branches: git branch -d **Kopie** eines Branches anfertigen: git branch copyOfMyBranch MyBranch **Irrtümlichen** Commit löschen: git reset --hard HEAD^ # ^signifies the number of commits to delete: ^-1 ^^-2 **Umbenennen** eines Branches: git branch -m old_branch new_branch # Rename branch locally git push origin :old_branch # Delete the old branch git push -u origin new_branch # Push the new branch, set local branch to track the new remote **Move** commits to another branch * http://stackoverflow.com/questions/2369426/how-to-move-certain-commits-to-another-branch-in-git * http://effectif.com/git/move-commit-from-one-branch-to-another ====== Rebase ====== Um z.B. einen Branch wieder an ''master'' anzuhängen, nachdem weiter Commits in master erfolgt sind: git checkout git rebase (-i) master # -i: interaktiv http://stackoverflow.com/questions/3480741/git-move-a-branchs-start-forward-in-the-tree ===== Fork mit originalem Repository abgleichen ===== git remote -v Falls ''upstream'' nicht vorhanden ist, muss es hinzugefügt werden (nur einmal nötig):\\ ''git remote add upstream https://github.com/contiki-os/contiki'' Mit den folgenden Befehlen kann zwischen HTTPS und SSH umgeschalten werden:\\ git remote set-url origin git@github.com:tscheffl/contiki.git git remote set-url origin https://github.com/tscheffl/contiki.git Fetch alle Branches von Remote (remote-tracking), z.B. upstream/master: git fetch upstream Stelle sicher, im master-Branch zu sein: git checkout master Rewrite des ''master'' Branch. Eigene Commits (die noch nicht in ''master'' enthalten sind) werden am Kopf von ''master'' neu eingefügt. git rebase upstream/master #Format: upstream/branch Nach dem //rebase// kann das Ergebnis per //force push// in das eigene geforkte Repository auf GitHub hochgeladen werden: git push f origin master (:!: In manchen Anleitungen wird ''git merge'' anstelle von ''git rebase'' verwendet. Ich finde das nicht so praktisch, da dabei ein neuer Commit erzeugt wird, wodurch nach dem ''git push'' auf Github eine Differenz zwischen Fork und originalem Repository angezeigt wird.) ===== Verschiedenes ===== === Zugriff auf 2-Faktor gesichertes Repository von der Kommandozeile === * https://ginnyfahs.medium.com/github-error-authentication-failed-from-command-line-3a545bfd0ca8 * [[https://superuser.com/questions/232373/how-to-tell-git-which-private-key-to-use|How to tell git which private key to use?]] * [[https://docs.github.com/en/authentication/connecting-to-github-with-ssh/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent|Generating a new SSH key and adding it to the ssh-agent]] ==== Tracking: ==== * http://lornajane.net/posts/2014/understanding-tracking-branches-in-git ==== Links: ==== * https://www.atlassian.com/git/tutorials/what-is-version-control * https://robots.thoughtbot.com/keeping-a-github-fork-updated * http://rogerdudler.github.io/git-guide/ ==== Wer bin ich?: ==== git config --global user.email "scheffler@beuth-hochschule.de" git config --global user.name "Thomas Scheffler" ==== Clonen per SSH: ==== git clone git@github.com:tscheffl/contiki.git stuff ==== Stuff ==== * https://trello.com/b/qvYlSdKT/git-commands ==== Neues Repository von der Kommandozeile erzeugen ==== echo "# Titelzeile" >> README.md git init git add README.md git commit -m "first commit" git remote add origin git://github.com:tscheffl/Name_des_Repo.git git push -u origin master