http://rogerdudler.github.io/git-guide/index.de.html
http://marklodato.github.io/visual-git-guide/index-en.html
https://www.neonscience.org/version-control-git-series
https://de.atlassian.com/git/tutorials/undoing-changes
https://git-scm.com/book/de/v1/Git-Grundlagen-%C3%84nderungen-r%C3%BCckg%C3%A4ngig-machen
http://de.gitready.com/beginner/2009/01/18/the-staging-area.html
https://rubygarage.org/blog/most-basic-git-commands-with-examples
Einführung: https://rogerdudler.github.io/git-guide/index.de.html
git clone https://github.com/dabmake/Makebench
Klone nach 'Makebench' ...
remote: Enumerating objects: 11, done.
remote: Counting objects: 100% (11/11), done.
remote: Compressing objects: 100% (8/8), done.
remote: Total 11 (delta 1), reused 0 (delta 0), pack-reused 0
Entpacke Objekte: 100% (11/11), Fertig.
Prüfe Konnektivität ... Fertig.
dab@dab-Predator:~$ cd Makebench/
dab@dab-Predator:~/Makebench$ ls
README.md singe-board-computer single-board-computer
dab@dab-Predator:~/Makebench$ cd single-board-computer/
dab@dab-Predator:~/Makebench/single-board-computer$ nano suite-definition.xml
dab@dab-Predator:~/Makebench/single-board-computer$ git add suite-definition.xml
dab@dab-Predator:~/Makebench/single-board-computer$ git commit -m "changed system/openssl to pts/openssl"
*** Please tell me who you are.
Run
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
to set your account's default identity.
Omit --global to set the identity only in this repository.
fatal: unable to auto-detect email address (got 'dab@dab-Predator.(none)')
ok, also Anlegen user id
git config --global user.email "dab@ct.de"
git commit -m "changed system/openssl to pts/openssl"
[master 6a3acf1] changed system/openssl to pts/openssl
1 file changed, 1 insertion(+), 1 deletion(-)
dab@dab-Predator:~/Makebench/single-board-computer$
Jetzt zum Repo pushen
git push origin master
Username for 'https://github.com':
Password for 'https://dabmake@github.com':
Zähle Objekte: 4, Fertig.
Delta compression using up to 8 threads.
Komprimiere Objekte: 100% (3/3), Fertig.
Schreibe Objekte: 100% (4/4), 350 bytes | 0 bytes/s, Fertig.
Total 4 (delta 2), reused 0 (delta 0)
remote: Resolving deltas: 100% (2/2), completed with 2 local objects.
To https://github.com/dabmake/Makebench
3b9af85..6a3acf1 master -> master
dab@dab-Predator:~/Makebench/single-board-computer$
Gelöschte Dateien committen
dab@dab-Predator:~/Makebench$ rm -rf singe-board-computer/
dab@dab-Predator:~/Makebench$ ls
README.md single-board-computer
dab@dab-Predator:~/Makebench$ git add *
dab@dab-Predator:~/Makebench$ git commit -m "removed double folderl"
Auf Branch master
Ihr Branch ist auf dem selben Stand wie 'origin/master'.
Änderungen, die nicht zum Commit vorgemerkt sind:
gelöscht: singe-board-computer/suite-definition.xml
keine Änderungen zum Commit vorgemerkt
dab@dab-Predator:~/Makebench$ git add -u
dab@dab-Predator:~/Makebench$ git commit -m "removed double folderl"
[master 10c639c] removed double folderl
1 file changed, 77 deletions(-)
delete mode 100644 singe-board-computer/suite-definition.xml
dab@dab-Predator:~/Makebench$ git push origin master
Username for 'https://github.com': dabmake
Password for 'https://dabmake@github.com':
Zähle Objekte: 2, Fertig.
Delta compression using up to 8 threads.
Komprimiere Objekte: 100% (2/2), Fertig.
Schreibe Objekte: 100% (2/2), 271 bytes | 0 bytes/s, Fertig.
Total 2 (delta 0), reused 0 (delta 0)
To https://github.com/dabmake/Makebench
6a3acf1..10c639c master -> master
dab@dab-Predator:~/Makebench$
Neues Repo für Python-Skripte für Anki Vector
dab@dab-Alpha:~/anki_ws$ ls -al
insgesamt 20
drwxr-xr-x 2 dab dab 4096 Feb 9 12:24 .
drwxr-xr-x 31 dab dab 4096 Feb 7 00:29 ..
-rw-r--r-- 1 dab dab 2566 Feb 8 20:00 drive.py
-rw-r--r-- 1 dab dab 975 Feb 9 12:24 image.py
-rw-r--r-- 1 dab dab 1056 Jan 19 09:16 ruler.py
3 Dateien mit unterschiedlich langen Skripten
dab@dab-Alpha:~/anki_ws$ git init
Leeres Git-Repository in /home/dab/anki_ws/.git/ initialisiert
dab@dab-Alpha:~/anki_ws$ ls -al
insgesamt 24
drwxr-xr-x 3 dab dab 4096 Feb 10 11:48 .
drwxr-xr-x 31 dab dab 4096 Feb 7 00:29 ..
-rw-r--r-- 1 dab dab 2566 Feb 8 20:00 drive.py
drwxr-xr-x 7 dab dab 4096 Feb 10 11:48 .git
-rw-r--r-- 1 dab dab 975 Feb 9 12:24 image.py
-rw-r--r-- 1 dab dab 1056 Jan 19 09:16 ruler.py
hinzugekommen ist ein Versteckter Ordner names .git
dab@dab-Alpha:~/anki_ws$ cd .git
dab@dab-Alpha:~/anki_ws/.git$ ls -al
insgesamt 40
drwxr-xr-x 7 dab dab 4096 Feb 10 11:48 .
drwxr-xr-x 3 dab dab 4096 Feb 10 11:48 ..
drwxr-xr-x 2 dab dab 4096 Feb 10 11:48 branches
-rw-r--r-- 1 dab dab 92 Feb 10 11:48 config
-rw-r--r-- 1 dab dab 73 Feb 10 11:48 description
-rw-r--r-- 1 dab dab 23 Feb 10 11:48 HEAD
drwxr-xr-x 2 dab dab 4096 Feb 10 11:48 hooks
drwxr-xr-x 2 dab dab 4096 Feb 10 11:48 info
drwxr-xr-x 4 dab dab 4096 Feb 10 11:48 objects
drwxr-xr-x 4 dab dab 4096 Feb 10 11:48 refs
Die Daten und Ordner enthalten im Moment eher nur Dummy-Daten und müssen/sollten konfiguriert werden. Da wir planen, später das Repo auf Github zu pushen, konfigurieren wir die Nutzerdaten. Die kann man in die Datei config für jedes Repo einzeln schreiben, oder global mit folgenden Befehlen anlegen.
dab@dab-Alpha:~/anki_ws$ git config --global user.name "dabmake"
dab@dab-Alpha:~/anki_ws$ git config --global user.email "dab@ct.de"
git erzeugt die Datei .gitconfig im Home-Verzeichnis mit folgendem Inhalt:
[user]
name = dabmake
email = dab@ct.de
Die Konfiguration lässt sich abfragen:
dab@dab-Alpha:~/anki_ws$ git config --list
user.name=dabmake
user.email=dab@ct.de
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true
Bislang ist noch nichts weiter mit git versioniert, wie folgender Befehl zeigt
dab@dab-Alpha:~/anki_ws$ git status
Auf Branch master
Noch keine Commits
Unversionierte Dateien:
(benutzen Sie "git add <Datei>...", um die Änderungen zum Commit vorzumerken)
drive.py
image.py
ruler.py
nichts zum Commit vorgemerkt, aber es gibt unversionierte Dateien
(benutzen Sie "git add" zum Versionieren)
Nun können wir Dateien zur Staging Area hinzufügen, und zwar mit git add -A oder git add . Im Unterschied zur letzteren Schreibweise fügt die erstere ALLE neuen und geänderten Dateien hinzu, auch die in Unterordnern.
dab@dab-Alpha:~/anki_ws$ git add -A
dab@dab-Alpha:~/anki_ws$ git status
Auf Branch master
Noch keine Commits
zum Commit vorgemerkte Änderungen:
(benutzen Sie "git rm --cached <Datei>..." zum Entfernen aus der Staging-Area)
neue Datei: drive.py
neue Datei: image.py
neue Datei: ruler.py
Prinzipiell kann man Dateien erst in der Staging Area (index) sammeln und ggfs wieder rausnehmen. Damit ist man flexibler in der Vorbereitung der zu veröffentlichenden Daten für die nächste Version (Head), sprich Commit. Damit kann man zwar alle lokalen Daten ändern, ist aber nicht gezwungen, alle gleichzeitig zu “veröffentlichen”, sondern nur eine Auswahl.
git commit -m "add first scripts"
[master (Basis-Commit) 163443b] add first scripts
3 files changed, 147 insertions(+)
create mode 100644 drive.py
create mode 100644 image.py
create mode 100644 ruler.py
In diversen Ordner und Dateien haben sich nun Dinge verändert. Die drei Skripte sind in das Versioncontrol-System in die aktuelle Version eingegangen (HEAD).
Das lokale Repo lässt sich nun in ein entferntes Repo speichern. Das muss aber zuvor etwa auf Guthub angelegt werden, damit man dort hineinschreiben kann. Viele Anleitungen schlagen vor, das Repo per Webinterface anzulegen. Das ist mitunter jedoch aufwändiger, als es gleich über die Shell zu erledigen. Allerdings kennt git selbst keinen direkten Befehl, ein Repo anzulegen, deshalb erledigt folgendes Skript git-create das, das direkt über die Github-REST-API geht.
#!/bin/sh
repo_name=$1
test -z $repo_name && echo "Repo name required." 1>&2 && exit 1
curl -u 'dabmake' https://api.github.com/user/repos -d "{\"name\":\"$repo_name\"}"
Damit legen wir das Repo AnkiVector unter dabmake an
dab@dab-Alpha:~/anki_ws$ git-create AnkiVector
Enter host password for user 'dabmake':
{
"id": 12345678,
"node_id": "MDEwOlJlcG9zaXRvcnkxNjk5NzY1NTU=",
"name": "AnkiVector",
"full_name": "dabmake/AnkiVector",
"private": false,
"owner": {
"login": "dabmake",
"id": 12345678,
"node_id": "MDQ6VXNlcjE2NzAyMjEz",
"avatar_url": "https://avatars0.githubusercontent.com/u/16702213?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/dabmake",
"html_url": "https://github.com/dabmake",
"followers_url": "https://api.github.com/users/dabmake/followers",
"following_url": "https://api.github.com/users/dabmake/following{/other_user}",
"gists_url": "https://api.github.com/users/dabmake/gists{/gist_id}",
"starred_url": "https://api.github.com/users/dabmake/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/dabmake/subscriptions",
"organizations_url": "https://api.github.com/users/dabmake/orgs",
"repos_url": "https://api.github.com/users/dabmake/repos",
"events_url": "https://api.github.com/users/dabmake/events{/privacy}",
"received_events_url": "https://api.github.com/users/dabmake/received_events",
"type": "User",
"site_admin": false
},
"html_url": "https://github.com/dabmake/AnkiVector",
"description": null,
"fork": false,
"url": "https://api.github.com/repos/dabmake/AnkiVector",
"forks_url": "https://api.github.com/repos/dabmake/AnkiVector/forks",
"keys_url": "https://api.github.com/repos/dabmake/AnkiVector/keys{/key_id}",
"collaborators_url": "https://api.github.com/repos/dabmake/AnkiVector/collaborators{/collaborator}",
"teams_url": "https://api.github.com/repos/dabmake/AnkiVector/teams",
"hooks_url": "https://api.github.com/repos/dabmake/AnkiVector/hooks",
"issue_events_url": "https://api.github.com/repos/dabmake/AnkiVector/issues/events{/number}",
"events_url": "https://api.github.com/repos/dabmake/AnkiVector/events",
"assignees_url": "https://api.github.com/repos/dabmake/AnkiVector/assignees{/user}",
"branches_url": "https://api.github.com/repos/dabmake/AnkiVector/branches{/branch}",
"tags_url": "https://api.github.com/repos/dabmake/AnkiVector/tags",
"blobs_url": "https://api.github.com/repos/dabmake/AnkiVector/git/blobs{/sha}",
"git_tags_url": "https://api.github.com/repos/dabmake/AnkiVector/git/tags{/sha}",
"git_refs_url": "https://api.github.com/repos/dabmake/AnkiVector/git/refs{/sha}",
"trees_url": "https://api.github.com/repos/dabmake/AnkiVector/git/trees{/sha}",
"statuses_url": "https://api.github.com/repos/dabmake/AnkiVector/statuses/{sha}",
"languages_url": "https://api.github.com/repos/dabmake/AnkiVector/languages",
"stargazers_url": "https://api.github.com/repos/dabmake/AnkiVector/stargazers",
"contributors_url": "https://api.github.com/repos/dabmake/AnkiVector/contributors",
"subscribers_url": "https://api.github.com/repos/dabmake/AnkiVector/subscribers",
"subscription_url": "https://api.github.com/repos/dabmake/AnkiVector/subscription",
"commits_url": "https://api.github.com/repos/dabmake/AnkiVector/commits{/sha}",
"git_commits_url": "https://api.github.com/repos/dabmake/AnkiVector/git/commits{/sha}",
"comments_url": "https://api.github.com/repos/dabmake/AnkiVector/comments{/number}",
"issue_comment_url": "https://api.github.com/repos/dabmake/AnkiVector/issues/comments{/number}",
"contents_url": "https://api.github.com/repos/dabmake/AnkiVector/contents/{+path}",
"compare_url": "https://api.github.com/repos/dabmake/AnkiVector/compare/{base}...{head}",
"merges_url": "https://api.github.com/repos/dabmake/AnkiVector/merges",
"archive_url": "https://api.github.com/repos/dabmake/AnkiVector/{archive_format}{/ref}",
"downloads_url": "https://api.github.com/repos/dabmake/AnkiVector/downloads",
"issues_url": "https://api.github.com/repos/dabmake/AnkiVector/issues{/number}",
"pulls_url": "https://api.github.com/repos/dabmake/AnkiVector/pulls{/number}",
"milestones_url": "https://api.github.com/repos/dabmake/AnkiVector/milestones{/number}",
"notifications_url": "https://api.github.com/repos/dabmake/AnkiVector/notifications{?since,all,participating}",
"labels_url": "https://api.github.com/repos/dabmake/AnkiVector/labels{/name}",
"releases_url": "https://api.github.com/repos/dabmake/AnkiVector/releases{/id}",
"deployments_url": "https://api.github.com/repos/dabmake/AnkiVector/deployments",
"created_at": "2019-02-10T12:37:28Z",
"updated_at": "2019-02-10T12:37:28Z",
"pushed_at": "2019-02-10T12:37:29Z",
"git_url": "git://github.com/dabmake/AnkiVector.git",
"ssh_url": "git@github.com:dabmake/AnkiVector.git",
"clone_url": "https://github.com/dabmake/AnkiVector.git",
"svn_url": "https://github.com/dabmake/AnkiVector",
"homepage": null,
"size": 0,
"stargazers_count": 0,
"watchers_count": 0,
"language": null,
"has_issues": true,
"has_projects": true,
"has_downloads": true,
"has_wiki": true,
"has_pages": false,
"forks_count": 0,
"mirror_url": null,
"archived": false,
"open_issues_count": 0,
"license": null,
"forks": 0,
"open_issues": 0,
"watchers": 0,
"default_branch": "master",
"permissions": {
"admin": true,
"push": true,
"pull": true
},
"allow_squash_merge": true,
"allow_merge_commit": true,
"allow_rebase_merge": true,
"network_count": 0,
"subscribers_count": 1
}
Jetzt können wir das remote Repo dem lokalen git bekannt machen
dab@dab-Alpha:~/anki_ws$ git remote add origin https://github.com/dabmake/AnkiVector.git
dab@dab-Alpha:~/anki_ws$ git push origin master
Username for 'https://github.com': dabmake
Password for 'https://dabmake@github.com':
Zähle Objekte: 5, Fertig.
Delta compression using up to 4 threads.
Komprimiere Objekte: 100% (5/5), Fertig.
Schreibe Objekte: 100% (5/5), 1.57 KiB | 536.00 KiB/s, Fertig.
Total 5 (delta 1), reused 0 (delta 0)
remote: Resolving deltas: 100% (1/1), done.
To https://github.com/dabmake/AnkiVector.git
* [new branch] master -> master
lädt man eine geändete Datei auf github hoch, so kann man dort unter den einzelnen Dateien und dem den Punkt History die Änderungen einsehen. Alle comitteten Version sind in einer Liste zu finden. Klick man auf die Option mit den ID, so zeigt github die diff-Datei an, die sich auch zum Patchen benutzen lässt.
So sehen die diffs aus
Aber auch mit git selbst lassen sich die Änderungen zwischen zwei Commits ausgeben:
dab@dab-Alpha:~/anki_ws$ git log
commit d53e20dbddb64fb59eb6f92c95c199b89834e596 (HEAD -> master, origin/master)
Author: dabmake <dab@ct.de>
Date: Sun Feb 10 19:43:12 2019 +0100
added 3D map, switched to position instead pose
commit 163443b4fc70fff162374bf43e2ba07c85ad47ff
Author: dabmake <dab@ct.de>
Date: Sun Feb 10 13:55:13 2019 +0100
add first scripts
dab@dab-Alpha:~/anki_ws$ git diff 163443b4fc70fff162374bf43e2ba07c85ad47ff d53e20dbddb64fb59eb6f92c95c199b89834e596
diff --git a/drive.py b/drive.py
index c43777f..7c13135 100644
--- a/drive.py
+++ b/drive.py
@@ -19,66 +19,74 @@
import anki_vector
-from anki_vector.util import degrees, distance_mm, speed_mmps
+from anki_vector.util import degrees, distance_mm, speed_mmps, Position
+
def main():
args = anki_vector.util.parse_command_args()
-
- with anki_vector.Robot() as robot:
+ #anki_vector.nav_map.NavMapComponent.init_nav_map_feed(frequency=0.5)
+ with anki_vector.Robot(args.serial, show_3d_viewer=True) as robot:
+ robot.show_viewer=True
robot.enable_camera_feed=True
- #robot.init_camera_feed()
- image = robot.camera.latest_image
- image.show()
- current_robot_pose = robot.pose
+ robot.viewer.show_video()
+
+ robot.enable_custom_object_detection=True
+ robot.enable_nav_map_feed=True
+
+
+
+ current_robot_pose = robot.pose.position
print (current_robot_pose)
print("Drive Vector off of charger...")
robot.behavior.drive_off_charger()
- current_robot_pose = robot.pose
+
+ current_robot_pose = robot.pose.position
print (current_robot_pose)
-
-
+
robot.behavior.drive_straight(distance_mm(100), speed_mmps(100))
- current_robot_pose = robot.pose
+ current_robot_pose = robot.pose.position
print (current_robot_pose)
robot.behavior.turn_in_place(degrees(90))
- current_robot_pose = robot.pose
+ current_robot_pose = robot.pose.position
print (current_robot_pose)
robot.behavior.drive_straight(distance_mm(100), speed_mmps(100))
- current_robot_pose = robot.pose
+ current_robot_pose = robot.pose.position
print (current_robot_pose)
robot.behavior.turn_in_place(degrees(90))
- current_robot_pose = robot.pose
+ current_robot_pose = robot.pose.position
print (current_robot_pose)
robot.behavior.drive_straight(distance_mm(100), speed_mmps(100))
- current_robot_pose = robot.pose
+ current_robot_pose = robot.pose.position
print (current_robot_pose)
robot.behavior.turn_in_place(degrees(90))
- current_robot_pose = robot.pose
+ current_robot_pose = robot.pose.position
print (current_robot_pose)
robot.behavior.drive_straight(distance_mm(100), speed_mmps(100))
- current_robot_pose = robot.pose
+ current_robot_pose = robot.pose.position
print (current_robot_pose)
robot.behavior.turn_in_place(degrees(90))
- current_robot_pose = robot.pose
+ current_robot_pose = robot.pose.position
print (current_robot_pose)
-
+ #latest_nav_map = robot.nav_map.latest_nav_map
+ #throws exception not to be initialized
robot.behavior.drive_on_charger()
- current_robot_pose = robot.pose
+ current_robot_pose = robot.pose.position
print (current_robot_pose)
+
if __name__ == '__main__':
main()
Wir haben im lokalen Verzeichnis die Datei drive.py verändert, merken aber, dass das keine gute Idee war. Mit git checkout lässt sich das reparieren
dab@dab-Alpha:~/anki_ws$ git status
Auf Branch master
Änderungen, die nicht zum Commit vorgemerkt sind:
(benutzen Sie "git add <Datei>...", um die Änderungen zum Commit vorzumerken)
(benutzen Sie "git checkout -- <Datei>...", um die Änderungen im Arbeitsverzeichnis zu verwerfen)
geändert: drive.py
keine Änderungen zum Commit vorgemerkt (benutzen Sie "git add" und/oder "git commit -a")
dab@dab-Alpha:~/anki_ws$ git checkout -- drive.py
dab@dab-Alpha:~/anki_ws$ git status
Auf Branch master
nichts zu committen, Arbeitsverzeichnis unverändert
Written with StackEdit.