Dies ist eine alte Version des Dokuments!
Inhaltsverzeichnis
GIT und Github
Im Labor wird Contiki für die Programmierung von Mikrocontrollern verwendet. Dazu wurde ein Fork des 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 <Datei> # muss man nach jeder Änderung machen! -> alternativ git add -u # fügt alle geänderten Dateien hinzu git commit -m "<Message>" # 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 <branch> git push -u origin <branch>
Löschen eines nicht mehr benötigten Branches:
git branch -d <branch>
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
Rebase
Um z.B. einen Branch wieder an master
anzuhängen, nachdem weiter Commits in master erfolgt sind:
git checkout <branch> 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:
<code bash>
git fetch upstream
</code>
Stelle sicher, im master-Branch zu sein:
<code bash>
git checkout master
</code>
Rewrite des
master Branch. Eigene Commits (die noch nicht in
master enthalten sind) werden
am Kopf von
master neu eingefügt.
<code bash>
git rebase upstream/master #Format: upstream/branch
</code>
Nach dem rebase kann das Ergebnis per force push in das eigene geforkte Repository auf GitHub hochgeladen werden:
<code bash>
git push f origin master
</code>
(
git merge In manchen Anleitungen wird
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 =====
==== 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?: ====
<code bash>
git config –global user.email „scheffler@beuth-hochschule.de“
git config –global user.name „Thomas Scheffler“
</code>
==== Clonen per SSH: ====
<code bash>
git clone git@github.com:tscheffl/contiki.git stuff
</code>
==== Stuff ====
* https://trello.com/b/qvYlSdKT/git-commands
==== Neues Repository von der Kommandozeile erzeugen ====
<code bash>
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
</code>