ロボットシステム学2016第10回

Mon Dec 5 17:35:46 JST 2016 (modified: Fri Nov 29 17:21:21 JST 2019)
views: 431, keywords:

  このエントリーをはてなブックマークに追加 
   

ロボットシステム学

第10回

上田 隆一

2016年12月7日@千葉工業大学

今日の内容

  • 先に課題1
    • GitとかGitHubとか普段から使っている人は課題をやりましょう
  • Git, GitHub

課題1(1/7まで)

  • 講義で作ったデバイスドライバをカスタマイズして
    1. GitHubにプッシュ
      • ライセンス、何をやったか分かるREADMEを書く
    2. Youtube等、パブリックで見られるところにデモをアップ
      • これも何をやっているか説明を書く
    3. 私まで電子メール
      • 件名: ロボットシステム学 課題1 名前 学籍番号
      • 内容、普通に他人に出すような電子メールで、上記GitHubとビデオのURLを貼る
        • 「普通」は任せますが、あんまり失礼だと匿名を保った上でTwitterで嘆きます

自分で書いたプログラムの管理

  • 自分で作ったプログラムの管理をどうするか?
    • 別にファイルやディレクトリのコピーでも良い
    • ファイルをhoge.c, hoge.c.org, hoge.c.orgorg...とコピーして保存
    • あるいはディレクトリに日付をつけて管理
  • ラズパイやマイコンのコードの管理は結構面倒
  • さらに便利にならないか?
    • 変更の日付等を自動で管理したい
    • 別のPCで使う。別の人が使えるようにしておく。

Git

  • 版管理(バージョン管理)システム
    • ファイルの変更履歴を管理するためのシステム
  • Linus Torvalds が作成
    • Linux の共同開発のため
  • 単にバージョン管理のためだけでなく、 コード公開のプラットフォームになっている
    • リポジトリの公開
    • GitHub, BitBucket

Gitのインストール

  • sudo apt install git 等
    • 最近はデフォルトで使える環境が多い
  • 使うときは次の2つの登録を
    • 自身の名前(ハンドルネーム)
    • メールアドレス
  • 使用するエディタも登録しておくと混乱しない
$ sudo apt-get install git
   ###自身の名前とe-mail アドレスを記録しておく###
   $ git config --global user.name "Ryuichi Ueda"
   $ git config --global user.email "ueda\@hogehoge.com"
   $ git config --global core.editor vim
   ###確認###
   $ cat .gitconfig
   [user]
   name = Ryuichi Ueda
   email = ueda\@hogehoge.com
   [core]
   editor = vim
   

リポジトリを作る

  • リポジトリ(repository)
    • 貯蔵庫、倉庫、納骨堂、埋葬所
    • 要はバージョン管理するディレクトリ
  • 2種類
    • リモートリポジトリ、ローカルリポジトリ
  • Git の基本的な使い方(あくまで基本)
    • リモートリポジトリをどこかに置き、そこから自分のマシンに それをクローンしてローカルリポジトリを作成
    • ローカルリポジトリで何かファイルを更新したら リモートリポジトリに反映

GitHub

  • Gitを利用したサービス
    • リポジトリのホスティングと公開
    • 公開しないリポジトリも作成可能(有料)
    • 学校のメールアドレスだと無料で作れるかもしれません
  • 利用方法
    • ウェブサイト
    • コマンドライン

アカウント作成

  • GitHubにアクセス
    • https://github.com/
  • ユーザ名、email アドレス、パスワードを決めて "Sign up for GitHub"
    • ユーザ名は恥ずかしくないものを!
  • ・・・
  • プランを選ぶときに "Free"が選択されているのを 確認して"Finish sign up"
  • 登録したメールアドレスに確認メールが届くので インストラクションに従う
  • できる人は公開鍵の登録

リポジトリの作成

  • GitHubにリモートのものを一つ作ってみましょう
  • GitHubのサイトでの操作
    • 右下あたりにある"New repository"をクリック
    • 必要事項を記入
      • 後の操作の例のために以下をお願いします
        • "Initialize this repository with a README"にチェック
        • ライセンスのプルダウンからMITライセンスを選択
    • "Create repository"ボタンを押す
  • ウェブ画面にリポジトリの画面
    • READMEとLISENCEができている

リモートのリポジトリを ローカルに

  • リポジトリの画面の"clone or download"をクリック
  • 「HTTPS」を選択してURLをコピー
    • クリップボードのアイコンをクリックするとコピーできる
  • リポジトリを作りたいディレクトリで次の操作
    $ git clone <さっきクリップボードにコピーした文字列をペースト>
       Cloning into 'test'...
       remote: Counting objects: 4, done.
       remote: Compressing objects: 100% (3/3), done.
       remote: Total 4 (delta 0), reused 0 (delta 0), pack-reused 0
       Unpacking objects: 100% (4/4), done.
       Checking connectivity... done.
       $ cd test/
       $ ls -a
       .  ..  .git  LICENSE  README.md

リポジトリにコードを追加

  • なんでもいいからプログラムを一つ置く
    • 特にこだわりがなければ次のようなシェルスクリプトを
      $ cat hoge.bash
         #!/bin/bash
      
         echo hoge
  • 「addしてstatus見てcommit」
    • リポジトリへのファイルの登録
      • まず、登録対象のファイルを選択(git add)
      • 選択されたファイルは「ステージ」に載せられる
        • 「ステージング」 と表現
        • git statusで確認
    • ステージに置いたファイルを登録(git commit)
      • コミットする」と表現

コミットの操作

$ git add hoge.bash
   $ git status
   On branch master
   Your branch is up-to-date with 'origin/master'.
   Changes to be committed:
     (use "git reset HEAD <file>..." to unstage)
   new file:   hoge.bash
   $ git commit -m "Add a file"
   [master 9da0223] Add a file
    1 file changed, 3 insertions(+)
    create mode 100644 hoge.bash

リモートへの「push」

  • ローカルのコミットをリモートへ反映
    • origin: リモートのリポジトリのこと
    • master: masterブランチ
$ git push origin master
   Counting objects: 3, done.
   Delta compression using up to 4 threads.
   Compressing objects: 100% (2/2), done.
   Writing objects: 100% (3/3), 333 bytes | 0 bytes/s, done.
   Total 3 (delta 0), reused 0 (delta 0)
   To https://github.com/ryuichiueda/test.git
      b09eefb..9da0223  master -> master

ブランチ

  • ディレクトリの中の状態を分岐したもの
    • ブランチ = 枝
  • 今のところブランチは「master」だけ
  • $ git branch
       * master
  • 開発用ブランチを作りましょう
  • $ git checkout -b dev
       Switched to a new branch 'dev'
       $ git branch
       * dev
         master

ブランチでの作業とマージ

  • 開発をdevブランチで進めてコミット
    • hogeを2個にする
  • $ cat hoge.bash (hoge.bashを書き換えた後にcatしたところ)
       #!/bin/bash
       echo hoge
       echo hoge
       $ git add hoge.bash 
       $ git commit -m "Add another hoge"
       [dev ce996b6] Add another hoge
        1 file changed, 1 insertion(+), 1 deletion(-)
  • masterブランチに戻ってみましょう
  • $ git checkout master
       Switched to branch 'master'
       Your branch is up-to-date with 'origin/master'.
       $ git branch
         dev
       * master
  • hoge.bashが元に戻っている
    $ cat hoge.bash
       #!/bin/bash
       echo hoge
  • devの成果をmasterに取り込む
    $ git merge dev
       Updating 9da0223..ce996b6
       Fast-forward
       hoge.bash | 2 +-
       1 file changed, 1 insertion(+), 1 deletion(-)
  • ついでにpushしておきましょう
  • $ git push #masterのpushは2回目以降、これで良い
  • 各自調べましょう: master以外のブランチもリモートにpush可能

別のマシン/ディレクトリ/人とのリポジトリの共有

  • リポジトリは何個でも作れる
  • 別のマシーンかディレクトリにクローンして、編集してpushしてみましょう
  • $ cd /tmp/
       $ git clone https://github.com/ryuichiueda/test.git
       $ cd test
       $ cat hoge.bash 
       #!/bin/bash
       echo hoge
       echo hoge
       echo hoge #もう一個増やす
       $ git commit -m "Third hoge"
       $ git commit -m "Third hoge"
       $ git push
  • 元のリポジトリに戻ってこの更新を反映してみましょう
    • git pull
$ cd ~/GIT/test/ #ディレクトリは各自最初にcloneしたところを指定
   $ cat hoge.bash #まだechoが二つ
   #!/bin/bash
   echo hoge
   echo hoge
   $ git pull
   remote: Counting objects: 3, done.
   remote: Compressing objects: 100% (1/1), done.
   remote: Total 3 (delta 1), reused 3 (delta 1), pack-reused 0
   Unpacking objects: 100% (3/3), done.
   From https://github.com/ryuichiueda/test
      ce996b6..ff549b7  master     -> origin/master
   Updating ce996b6..ff549b7
   Fast-forward
    hoge.bash | 1 +
    1 file changed, 1 insertion(+)
   $ cat hoge.bash #3つに
   #!/bin/bash
   echo hoge
   echo hoge
   echo hoge
   

発展

  • 昨年の資料(12ページからGit)
    • 自分のサーバにリモートリポジトリを作る
    •  フォーク
      •  人のリポジトリを自分のところに持ってくる
    • プルリクエスト
      • リポジトリの持ち主に修正したものを取り込んでもらう
  • 他のキーワード
    •  コンフリクト
      •  二つのリポジトリで同じ箇所を別の書き方で修正