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.
git clone https://github.com/tscheffl/contiki cd contiki git status
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
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
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
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.)
git config --global user.email "scheffler@beuth-hochschule.de" git config --global user.name "Thomas Scheffler"
git clone git@github.com:tscheffl/contiki.git stuff
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