3. Versionskontrollsysteme
Du wirst ein „Versionskontrollsystem“ verwenden, um deine Arbeit zu verfolgen und deinem Ausbilder die Möglichkeit zu geben, Feedback zu geben. Die Chancen stehen gut, dass du ein solches System, in einem großen Unternehmen verwenden würdest.
3.1. Kurzreferenz
Dies ist eine Kurzreferenz, komme wieder wenn du deine Arbeit abgeben willst. wir werden uns später einer detaillierten Erklärung widmen.
3.1.1. Bestätigen und Hochladen
Erledige dies wann immer du mit einer Programmier Session fertig bist:
Öffne entweder die „Eingabeaufforderung“ unter Windows oder das „Terminal“ unter MacOS.
Gebe dafür
cd meinVerzeichnisname
ein, um zu deinem Verzeichnis zu navigieren. Meistens funktioniert das mitcd Desktop
gefolgt voncd learn-arcade-work
. Wenn du OneDrive installiert haben, musst du eventuell zuerstcd OneDrive
eingeben. Normalerweise kannst du die ersten paar Buchstaben eintippen und dann auf <tab> drücken, um den Rest des Verzeichnisnamens einzugeben.Type
git add -A
Gefolgt von
git commit -m "Work on lab 1"
um den Kommentar auf den aktuellsten Stand zu bringen.und noch
git push
Falls du eine Fehlermeldung erhältst, siehe What If You Can’t Push?
3.1.2. Gebe deine Ergebnisse ab
Gehe auf GitHub
Registriere dich falls nötig (In der oberen rechten Ecke. achte darauf dich nicht nochmal zu registrieren)
Klicke auf dein Repository auf der linken Seite
Suche den Ordner mit deinen Lab
Kopier den Link
Öffne dass Scholar/Moodle für dein lab
Füge den Link ein, und gebe deine Ergebnisse ab
für mehr befehle schaue unter Longer Git Command Reference nach.
3.2. Was ist ein verteiltes Versionskontrollsystem
Keine ernsthafte Entwicklung sollte ohne Versionskontrolle durchgeführt werden. In der Tat ist ein Versionskontrolle so wichtig, dass viele Entwickler argumentieren würden, dass fast keine Entwicklung ohne Versionskontrolle durchgeführt werden sollte. Sogar alle meine Notizen für den Unterricht bewahre ich in der Versionskontrolle auf.
Die Versionskontrolle erlaubt Entwicklern :
Jede vergangene Version eines Projektes wiederherzustellen.
Du veröffentlichts Version 1.5 deines programes und nun Stürzt es ab? Schnell! Gehe einfach wieder zurück zu Version 1.4.
Hat der ‚Neue‘ das Projekt vermasselt? Kehre einfach zu einer alten Version zurück!
Wisse genau, was im Code geändert wurde, wann und von wem. Sehe, wer tatsächlich die Arbeit macht. Wenn ein Fehler eingefügt wird siehst du, wann und von wem er eingefügt wurde.
Einfacher Austausch von Code zwischen Entwicklern.
Einfaches Arbeiten unabhängig von anderen Entwicklern.
Stelle aus Versehen gelöschte oder überschriebende Dateien wieder her.
Geh zurück und erstelle einen bug-fix für frühere Versionen eines Programms.
Arbeite an mehreren Computern und behalte deine Dateien synchron.
Versionskontrolle spart unsagbar viel Zeit und Kopfzerbrechen. Früher war die Versionskontrolle so lernintensiv, dass sich einige Entwickler weigerten, sie zu benutzen. Zum Glück sind die heutigen Tools zur Versionskontrolle so einfach zu bedienen, dass es keine Ausrede mehr gibt, es nicht zu tun.
Es gibt zwei Haupttypen der Versionskontrolle. Die ursprünglichen Versionskontrollsysteme waren „zentralisiert“ und erforderten einen zentralen Server. Heutzutage verwenden wir „verteilte Versionskontrollsysteme“ (DVCS), die keinen zentralen Server benötigen. Das Softwareprogramm Git ist eine der beliebtesten Arten von DVCS, die heute verfügbar sind.
3.3. Installation von Git
Lass uns git
auf deinem Computer installieren. Wenn du einen Schulcomputer verwendest, auf dem git
vorinstalliert ist, kannst du diesen Schritt überspringen.
Wenn du mit Windows arbeitest, klicke auf den untenstehenden Link und lade die 64-Bit-Version von git
herunter und installieren sie:
Arbeitest du mit einem Mac:
Öffnen das Fenster „Terminal“. (Unter dem Ordner „Dienstprogramme“ in Anwendungen.)
Geben Sie
git
an der Eingabeaufforderung ein.Sie sollten nun aufgefordert werden, einige Entwicklerwerkzeuge zu installieren, zu denen auch
git
gehört.
3.4. Ein Fork des Repository Erstellen
Achtung
Du solltest nur einmal während des Kurses einen Fork vom Code anlegen müssen. Wenn du es mehr als einmal tust, ist etwas nicht in Ordnung. Höre auf, bevor du das tust und wende dich an den Dozenten. Es bereitet allen Beteiligten große Kopfschmerzen, wenn du mehr als einmal ein Fork anlegst.
Wir werden unsere Programme online auf einer Website namens GitHub speichern. Fang an, indem du dich auf der Website anmeldest: https://github.com Da dies ein „Portfolio“ für deine Arbeit werden könnte, solltest du einen Kontonamen, der in einer professionellen Umgebung funktionieren würde, nehmen. Du kannst ihn gerne anonym halten, vermeide nur etwas zu Albernes.
Rufe diese Webadresse auf, die eine Vorlage für die labs enthält, die wir im Unterricht erstellen werden: https://github.com/pythonarcade/learn-arcade-work
Wir müssen ein „Fork“ des Repositorys erstellen. Dadurch wird deine eigene Kopie des Repositorys erstellt, die unabhängig von meiner ist. Fork das Repository, indem du auf die Schaltfläche fork in der oberen rechten Ecke klicken:

Forken des Repositorys
Nach einigen Änderung, solltest du deinen eigenen Fork haben. Vergewissere dich, dass du in deinem eigenen Fork bist und nicht auf dem Original, indem du nach deinem Kontonamen suchst:

Verifiziere, dass du an deinem Fork arbeitest und nicht an dem Original Code
Jetzt hast du deinen eigenen Fork, aber er existiert auf dem GitHub-Server und nicht auf deinem Computer. Wir werden das im nächsten Abschnitt beheben.
3.5. Klonen des Repositorys
Bemerkung
Jedes Mal, wenn du auf einem neuen Computer zu arbeiten beginnst, musst du einen neuen Klon erstellen. (Es sei denn, du verwendest ein Flash-Laufwerk.)
Führe unter Windows das Programm „Command Prompt“ aus. Oder, wenn du unter MacOS bist, dann geh unter „Programme“, such nach „Dienstprogramme“ und führ „Terminal“ aus. Du solltest so etwas wie in einer der folgenden Abbildungen erhalten:

Windows Eingabeaufforderung

MacOS Terminal Fenster
Überlege dir, wo du deine Dateien speichern möchten. Vielleicht möchtest du sie auf deinem Laptop, einem Flash-Laufwerk oder einem Netzwerklaufwerk speichern. Wenn du dir nicht sicher bist, leg sie einfach auf dem Desktop ab.
Wir müssen unser „Arbeitsverzeichnis“ dorthin ändern, wo wir unsere Dateien speichern wollen. Wenn du es auf deinem Desktop speicherst, gib einfach
cd Desktop
ein. Unter MacOS wird zwischen Groß- und Kleinschreibung unterschieden.
Bemerkung
Sie können Verzeichnisse mit dem Befehl cd
(change directory) wechseln. Wenn du ein Terminal oder eine Eingabeaufforderung öffnen, arbeitest du standardmäßig in dein „Home“-Verzeichnis. Lass uns den Befehl cd
verwenden. Es gibt viele Varianten, aber es gibt einige Variationen, die Sie kennen müssen:
cd
- Wechsel in dein „Home“-Verzeichnis.cd mydir
- Wechsel in das Verzeichnismydir
. Dieses Verzeichnis muss im gleichen Verzeichnis sein, in dem Sie sich jetzt befinden. Wenn Sie nicht den ganzen Verzeichnisnamen eingeben wollen, können Sie auch die ersten Buchstaben eingeben und dann <tab> drücken.cd ..
- Geht ein Verzeichnis nach oben. Wenn du also inC:\home\user\Desktop
sind, gehe nach oben zuC:\home\user
.
Wir wollen das von dir erstellte Repository auf deinem Computer kopieren. Wir werden dies einen „Klon“ nennen. Ein Klon ist eine Kopie, die wir normalerweise versuchen, synchron zu halten, was etwas anderes ist als ein „Fork“. Klicken Sie auf die Schaltfläche
und sehen Sie die Abbildung unten. 1) Stelle sicher, dass Sie mit „HTTPS“ klonen. 2) Stellen Sie sicher, dass das angezeigte Konto Ihres ist und nicht meines oder „pythonarcade“. 3) Klicken Sie auf die auf die Schaltfläche „Link kopieren“.

Gebe``git clone`` gefolgt von einem Leerzeichen ein. Zum Schluss füge die kopierte Adresse ein. Möglicherweise müssen Sie die Maus zum Einfügen benutzen, da ctrl-v nicht immer in der Eingabeaufforderung eingefügt wird. Es sollte so aussehen:

Erledigt! nun hast du ein Verzeichnis eingerichtet, in dem du deine Arbeit erledigen kannst.
3.6. Ein Projekt in Pycharm öffnen
Starte PyCharm und wähle dann „Datei…Öffnen“. Du kannst dein Desktop mit dem nicht sehr intuitiven Symbol auswählen, das in (1) unten gezeigt wird. Suchen Sie dann den Ordner und wählen Sie ihn aus, um ihn als Projekt zu öffnen, wie in (2) gezeigt.

Dein Projekt sollte wie das folgende Bild aussehen. Wenn dies nicht der Fall ist, hast du möglicherweise den falschen Ordner geöffnet. Klicke auf „Datei…Öffnen“ und versuchen Sie es erneut.

Wenn du auf den Pfeil neben dem Ordnernamen klicken, Kannst du alle Ordner im Projektordner sehen.

Wenn du vorhast, von Computer zu Computer zu wechseln, versuche, auf einem Flash-Drive anstatt auf dem Desktop zu speichern. Dann kannst du dein Projekt imer wieder öffnen, indem Sie einfach „Datei…Öffnen“ wählen.
3.7. Änderrung von Datein
Lass uns üben, eine schnelle Änderung an einer unserer Dateien vorzunehmen. Öffnen dein Projektordner, öffne den Ordner „Lab 1“ und öffne dann „Lab 1“. Geben Sie „Hi“ oder etwas Ähnliches ein.

die Datei wird automatisch gespeichert.
3.8. Instarlire Arcade
Während des bearbeiten der Datei, wirst du eine Benachrichtigung die wie folgt aussieht:

Instalire die ‚arcade‘ library. PyCharm würd den rest für dich übernehmen.
3.9. Lege deinen Code fest
It is time to commit. Wait! You are young and don’t want to commit yet?
The cool thing with version control, is that every time you commit, you can go back to the code at that point in time. Version control lets you take it all back! It is the best type of commitment ever!
First, open the terminal, and switch to the directory with your project using the cd
command:
C:\Users\craven\Desktop>cd learn-arcade-workC:\Users\craven\Desktop\learn-arcade-work>
Optionally, we can use git status
to see what files have changed:
C:\Users\craven\Desktop\learn-arcade-work>git status
On branch master
Your branch is up to date with 'origin/master'.
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: Lab 01 - First Program/lab_01.py
no changes added to commit (use "git add" and/or "git commit -a")
Now, add all the files that have changed. The -A
option means all files.
Optionally, we could list out each file, but that’s a lot
of work and we don’t want to leave anything behind anyway.
C:\Users\craven\Desktop\learn-arcade-work> git add -A
Commit the changes:
C:\Users\craven\Desktop\learn-arcade-work>git commit -m "Work on lab 1"
[master 5105a0c] Work on lab 1
1 file changed, 1 insertion(+)
You might get an error, if the computer doesn’t know who you are yet. If you get this error, it will tell you the commands you need to run. They will look like:
git config --global user.email "put.your.email.here@my.simpson.edu"
git config --global user.name "Jane Smith"
Then you can re-run your commit command. You can use the „up“ arrow to get commands you typed in previously so you don’t need to retype anything.
3.10. Push Your Code
And push them to the server:
C:\Users\craven\Desktop\learn-arcade-work>git push
Counting objects: 4, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (4/4), 329 bytes | 0 bytes/s, done.
Total 4 (delta 1), reused 0 (delta 0)
To bitbucket.org:pcraven/arcade-games-work2.git
519c361..45028a5 master -> master
Look to see if the message says that there is an „error.“ The message will probably look a little different than what you see above, with other objects or threads, but there should not be any errors. If there are errors, skip down to What If You Can’t Push?.
3.11. Turning In Your Programs
When it comes time to turn in one of your programs, go back to GitHub. Click on „source“, find the lab file, copy the URL:

Now go to Scholar and paste the link into the text field for the lab you are are working on.
3.12. What If You Can’t Push?
What happens if you can’t push to the server? If you get an error like what’s below? (See highlighted lines.)
C:\Users\craven\Desktop\learn-arcade-work> git push
To bitbucket.org:pcraven/arcade-games-work2.git
! [rejected] master -> master (fetch first)
error: failed to push some refs to 'git@bitbucket.org:pcraven/arcade-games-work2.git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
You are getting an error because there are changes on the server that aren’t on your computer. You need to pull and merge those changes.
3.12.1. Step 1: Pull Changes From The Server
Pull changes from the server:
git pull
Normally, this will work fine and you’ll be done. If so, you can do a
git push
and your code will be pushed to the server.
3.12.1.1. Step 2: Merging
If you get a screen like the image below, the computer automatically
merged your code bases but it now wants you to type in a comment for the
merge. We’ll take the default comment.
Hold down the shift key and type ZZ
.
If that doesn’t work, hit escape, and then try again.
(You are in an editor called vim and it is asking you for a comment about merging the files. Unfortunately vim is really hard to learn. Shift-ZZ is the command to save, and all we want to do is get out of it and move on.)

It should finish with something that looks like:
Merge made by the 'recursive' strategy.
Lab 01 - First Program/lab_01.py | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
If instead you get this:
Then we edited the same file in the same spot. We have to tell the computer if we want our changes, or the changes on the other computer.
3.12.1.2. Step 3: Resolving a Merge Conflict
Do a git status
. It should look something like this:
C:\Users\craven\Desktop\learn-arcade-work> git status
On branch master
Your branch and 'origin/master' have diverged,
and have 1 and 1 different commits each, respectively.
(use "git pull" to merge the remote branch into yours)
You have unmerged paths.
(fix conflicts and run "git commit")
(use "git merge --abort" to abort the merge)
Unmerged paths:
(use "git add <file>..." to mark resolution)
both modified: Lab 01 - First Program/lab_01.py
no changes added to commit (use "git add" and/or "git commit -a")
The key thing to look for is any file that says both modified
.
If you want your copy, type:
git checkout --ours "Lab 01 - First Program/lab_01.py"
If instead you want their copy (or the copy on the other computer) type
git checkout --theirs "Lab 01 - First Program/lab_01.py"
Then when you are all done with all merges, type:
C:\Users\craven\Desktop\learn-arcade-work> git add *
C:\Users\craven\Desktop\learn-arcade-work> git commit -m"Merged"
[master e083f36] Merged
C:\Users\craven\Desktop\learn-arcade-work> git push
Counting objects: 5, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (5/5), done.
Writing objects: 100% (5/5), 531 bytes | 0 bytes/s, done.
Total 5 (delta 2), reused 0 (delta 0)
To bitbucket.org:pcraven/arcade-games-work2.git
6a8f398..e083f36 master -> master
3.12.2. Step 4: Try Pushing Again
C:\Users\craven\Desktop\learn-arcade-work> git push
Counting objects: 6, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (6/6), 604 bytes | 0 bytes/s, done.
Total 6 (delta 2), reused 0 (delta 0)
To bitbucket.org:pcraven/arcade-games-work2.git
d66b008..aeb9cf3 master -> master
3.13. Longer Git Command Reference
In my experience with 300 level group-project classes, these commands seem to capture most of what students need to do.
Command |
Description |
---|---|
|
See what has changed |
|
Grab stuff from the server, but don’t merge |
|
Merge |
|
Abort a merge |
|
Fetch and Merge |
|
Add myfile.txt to be committed |
|
Add everything |
|
Search all files to see if there is merge error text. Do this before committing |
|
Toss your changes in a merge, use theirs |
|
Toss their changes, use yours |
|
Remove all your changes, go back to what was last committed. Untracked files are kept. |
|
Remove untracked files |
|
Find the hash of a check-in, and you can go back to that check in. (Don’t use 44fd, but replace with the has you want.) |
|
Go back to most recent check in on the master branch. |
|
Commit your work. Use a descriptive message or the other people in the class will be irritated with you. |
|
Push commit up to the server. |