linuxカーネル開発者予備軍 のためのgit howtogit の基本的なコマンド git...

68
1 ©2008. RENESAS Technology Corp., / Nobuhiro Iwamatsu All rights reserved. Linuxカーネル開発者予備軍 のためのGit Howto Japan Technical Jamboree 2009/05/12 ()ルネサス ソリューションズ システムビジネス本部 システム推進部 第三グループ 岩松 信洋

Upload: others

Post on 12-Aug-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Linuxカーネル開発者予備軍 のためのGit HowtoGit の基本的なコマンド git clone(リポジトリのコピー) git add/rm/mv(ファイルの追加、削除、リネイム)

1 ©2008. RENESAS Technology Corp., / Nobuhiro Iwamatsu All rights reserved.

Linuxカーネル開発者予備軍のためのGit Howto

Japan Technical Jamboree 2009/05/12

(株)ルネサス ソリューションズシステムビジネス本部 システム推進部 第三グループ

岩松 信洋

Page 2: Linuxカーネル開発者予備軍 のためのGit HowtoGit の基本的なコマンド git clone(リポジトリのコピー) git add/rm/mv(ファイルの追加、削除、リネイム)

2 ©2008. RENESAS Technology Corp., / Nobuhiro Iwamatsu All rights reserved.

自己紹介

● 岩松 信洋 (IWAMATSU Nobuhiro)● Linux カーネル開発をしています(Renesas SH)● U-Boot のSHアーキテクチャメンテナしています● Debian の開発に参加しています

– Debian Maintainer / Debian JP Project Leader

Page 3: Linuxカーネル開発者予備軍 のためのGit HowtoGit の基本的なコマンド git clone(リポジトリのコピー) git add/rm/mv(ファイルの追加、削除、リネイム)

3 ©2008. RENESAS Technology Corp., / Nobuhiro Iwamatsu All rights reserved.

今回のお題

1.Gitの基本的なコマンド

2.Gitを使った開発の流れ1.パッチを送るまで

2.最新機能を試す

3.質疑応答

Linuxカーネル開発者予軍のためのGit Howto

Page 4: Linuxカーネル開発者予備軍 のためのGit HowtoGit の基本的なコマンド git clone(リポジトリのコピー) git add/rm/mv(ファイルの追加、削除、リネイム)

4 ©2008. RENESAS Technology Corp., / Nobuhiro Iwamatsu All rights reserved.

1. Gitの基本的なコマンド

Page 5: Linuxカーネル開発者予備軍 のためのGit HowtoGit の基本的なコマンド git clone(リポジトリのコピー) git add/rm/mv(ファイルの追加、削除、リネイム)

5 ©2008. RENESAS Technology Corp., / Nobuhiro Iwamatsu All rights reserved.

Subversion

リポジトリ

作業PC

ワーキングコピー

チェックアウト

編集

ユーザー

コミット

作業PC ネットワーク

コミット権が必要

Page 6: Linuxカーネル開発者予備軍 のためのGit HowtoGit の基本的なコマンド git clone(リポジトリのコピー) git add/rm/mv(ファイルの追加、削除、リネイム)

6 ©2008. RENESAS Technology Corp., / Nobuhiro Iwamatsu All rights reserved.

Git

リモートリポジトリ

編集

ユーザー

作業PC ネットワーク

ローカルリポジトリ

コミット

チェックアウト フェッチ

プッシュ

コミット権が必要これはあなたのリポジトリ

ワーキングコピー

index

Page 7: Linuxカーネル開発者予備軍 のためのGit HowtoGit の基本的なコマンド git clone(リポジトリのコピー) git add/rm/mv(ファイルの追加、削除、リネイム)

7 ©2008. RENESAS Technology Corp., / Nobuhiro Iwamatsu All rights reserved.

Git の基本的なコマンド● git clone(リポジトリのコピー)

● git add/rm/mv(ファイルの追加、削除、リネイム)

● git commit(ローカルリポジトリへコミット)

● git diff(差分の表示)

● git log(コミットログの確認)

● git format-patch(パッチの作成)

● git remote (リモートリポジトリの管理)

● git rebase/merge (ブランチ間のリベース、マージ)

● git pull (リモートリポジトリからコピー、マージ)

● git branch / git checkout (ブランチの操作)

Page 8: Linuxカーネル開発者予備軍 のためのGit HowtoGit の基本的なコマンド git clone(リポジトリのコピー) git add/rm/mv(ファイルの追加、削除、リネイム)

8 ©2008. RENESAS Technology Corp., / Nobuhiro Iwamatsu All rights reserved.

Git の基本的なコマンドワーキングコピー index ローカルリポジトリ リモートリポジトリ

git clone

git add

git commit -a

git commitgit commit

git push

git branch / git checkoutgit merge / git rebase

git pull

git diff

Page 9: Linuxカーネル開発者予備軍 のためのGit HowtoGit の基本的なコマンド git clone(リポジトリのコピー) git add/rm/mv(ファイルの追加、削除、リネイム)

9 ©2008. RENESAS Technology Corp., / Nobuhiro Iwamatsu All rights reserved.

2. Gitを使った開発の流れ

Page 10: Linuxカーネル開発者予備軍 のためのGit HowtoGit の基本的なコマンド git clone(リポジトリのコピー) git add/rm/mv(ファイルの追加、削除、リネイム)

10 ©2008. RENESAS Technology Corp., / Nobuhiro Iwamatsu All rights reserved.

2.1. パッチを送るまで

● 基本的な考え方● パッチは開発者の最新のコミットに対して修正

を送る● カーネルでは、各機能毎にメンテナがいるの

で、メンテナがメンテナンスしているリポジトリに対して修正を行う

● パッチもメンテナおよび機能毎に用意されているメーリングリストに送る

Page 11: Linuxカーネル開発者予備軍 のためのGit HowtoGit の基本的なコマンド git clone(リポジトリのコピー) git add/rm/mv(ファイルの追加、削除、リネイム)

11 ©2008. RENESAS Technology Corp., / Nobuhiro Iwamatsu All rights reserved.

2.1. パッチを送るまで

linus

net

sh arm

アーキテクチャ

sh arm

アーキテクチャ

sh armmtd netdev

ドライバ

... ...

crypto

Page 12: Linuxカーネル開発者予備軍 のためのGit HowtoGit の基本的なコマンド git clone(リポジトリのコピー) git add/rm/mv(ファイルの追加、削除、リネイム)

12 ©2008. RENESAS Technology Corp., / Nobuhiro Iwamatsu All rights reserved.

例) SHアーキテクチャに関するパッチを送る場合

Page 13: Linuxカーネル開発者予備軍 のためのGit HowtoGit の基本的なコマンド git clone(リポジトリのコピー) git add/rm/mv(ファイルの追加、削除、リネイム)

13 ©2008. RENESAS Technology Corp., / Nobuhiro Iwamatsu All rights reserved.

$ git config –-global \ user.name "Nobuhiro Iwamatsu"$ git config –-global user.email \ "[email protected]"

0. 環境の設定

Linux カーネル開発/Git では、名前とメールアドレスを利用するGitで使う名前とメールアドレスを設定する

Page 14: Linuxカーネル開発者予備軍 のためのGit HowtoGit の基本的なコマンド git clone(リポジトリのコピー) git add/rm/mv(ファイルの追加、削除、リネイム)

14 ©2008. RENESAS Technology Corp., / Nobuhiro Iwamatsu All rights reserved.

1. リポジトリをコピーする

SHアーキテクチャのGitリポジトリはMAINTAINERS ファイルに書いてあるSUPERHP: Paul MundtM: [email protected]: [email protected]: http://www.linux-sh.orgT: git git://git.kernel.org/pub/scm/linux/kernel/git/lethal/sh-2.6.git

Page 15: Linuxカーネル開発者予備軍 のためのGit HowtoGit の基本的なコマンド git clone(リポジトリのコピー) git add/rm/mv(ファイルの追加、削除、リネイム)

15 ©2008. RENESAS Technology Corp., / Nobuhiro Iwamatsu All rights reserved.

$ git clone \ git://git.kernel.org/pub/scm/linux/kernel/git/lethal/sh-2.6.git

1. リポジトリをコピーする

git clone コマンドでリポジトリをコピー

Page 16: Linuxカーネル開発者予備軍 のためのGit HowtoGit の基本的なコマンド git clone(リポジトリのコピー) git add/rm/mv(ファイルの追加、削除、リネイム)

16 ©2008. RENESAS Technology Corp., / Nobuhiro Iwamatsu All rights reserved.

1. リポジトリをコピーする

0 1 2masterブランチ

sh-2.6リモートリポジトリ

Page 17: Linuxカーネル開発者予備軍 のためのGit HowtoGit の基本的なコマンド git clone(リポジトリのコピー) git add/rm/mv(ファイルの追加、削除、リネイム)

17 ©2008. RENESAS Technology Corp., / Nobuhiro Iwamatsu All rights reserved.

1. リポジトリをコピーする

0 1 2masterブランチ

sh-2.6リモートリポジトリ

リポジトリをコピー

Page 18: Linuxカーネル開発者予備軍 のためのGit HowtoGit の基本的なコマンド git clone(リポジトリのコピー) git add/rm/mv(ファイルの追加、削除、リネイム)

18 ©2008. RENESAS Technology Corp., / Nobuhiro Iwamatsu All rights reserved.

1. リポジトリをコピーする

0 1 2

0 1 2origin/master

ブランチ

masterブランチ

sh-2.6リモートリポジトリ

ローカルリポジトリ

リポジトリをコピー

Page 19: Linuxカーネル開発者予備軍 のためのGit HowtoGit の基本的なコマンド git clone(リポジトリのコピー) git add/rm/mv(ファイルの追加、削除、リネイム)

19 ©2008. RENESAS Technology Corp., / Nobuhiro Iwamatsu All rights reserved.

1. リポジトリをコピーする

0 1 2

0 1 2origin/master

ブランチ

0 1 2heads/masterブランチ

masterブランチ

sh-2.6リモートリポジトリ

ローカルリポジトリ

リポジトリをコピー

リモートリポジトリのmasterブランチをローカルブランチとして登録する

Page 20: Linuxカーネル開発者予備軍 のためのGit HowtoGit の基本的なコマンド git clone(リポジトリのコピー) git add/rm/mv(ファイルの追加、削除、リネイム)

20 ©2008. RENESAS Technology Corp., / Nobuhiro Iwamatsu All rights reserved.

$ lssh-2.6$ cd sh-2.6

2. git clone を実行すると、sh-2.6 ディレクトリができているので、cd する

Page 21: Linuxカーネル開発者予備軍 のためのGit HowtoGit の基本的なコマンド git clone(リポジトリのコピー) git add/rm/mv(ファイルの追加、削除、リネイム)

21 ©2008. RENESAS Technology Corp., / Nobuhiro Iwamatsu All rights reserved.

3. 不具合の修正をする

$ vi arch/sh/Kconfig

..... edit .....

$ git diffdiff --git a/arch/sh/Kconfig b/arch/sh/Kconfigindex 8d50d52..19566c8 100644--- a/arch/sh/Kconfig+++ b/arch/sh/Kconfig@@ -530,7 +530,7 @@ source kernel/Kconfig.hz config KEXEC bool "kexec system call (EXPERIMENTAL)"- depends on SUPERH32 && EXPERIMENTAL+ depends on SUPERH32 && EXPERIMENTAL && MMU help kexec is a system call that implements the ability ......

Page 22: Linuxカーネル開発者予備軍 のためのGit HowtoGit の基本的なコマンド git clone(リポジトリのコピー) git add/rm/mv(ファイルの追加、削除、リネイム)

22 ©2008. RENESAS Technology Corp., / Nobuhiro Iwamatsu All rights reserved.

$ make ARCH=sh menuconfig$ make ARCH=sh CROSS_COMPILE=sh4-linux-gnu-\ -j8$ 実機でテスト

4. ドライバの修正ができたら、ソースのチェック、コンパイル、テストを行う

Page 23: Linuxカーネル開発者予備軍 のためのGit HowtoGit の基本的なコマンド git clone(リポジトリのコピー) git add/rm/mv(ファイルの追加、削除、リネイム)

23 ©2008. RENESAS Technology Corp., / Nobuhiro Iwamatsu All rights reserved.

$ git commit arch/sh/Kconfig -s

4. 問題がなければ、変更をコミットする

● -s は Signed-off をつけるという意味● git commit実行すると、エディタが立ち上がる

Page 24: Linuxカーネル開発者予備軍 のためのGit HowtoGit の基本的なコマンド git clone(リポジトリのコピー) git add/rm/mv(ファイルの追加、削除、リネイム)

24 ©2008. RENESAS Technology Corp., / Nobuhiro Iwamatsu All rights reserved.

$ git commit drivers/net/sh_eth.c -s

4. 問題がなければ、変更をコミットする

sh: Add MMU dependency for kexec Kexec is not likely to work on NON-MMU CPU because this addeddepend on MMU for kexec. Signed-off-by: Nobuhiro Iwamatsu \ <[email protected]>

● 1行目はメールのサブジェクトになる (後で説明)

● 空行を入れて、次の行からメールの本文になる

Page 25: Linuxカーネル開発者予備軍 のためのGit HowtoGit の基本的なコマンド git clone(リポジトリのコピー) git add/rm/mv(ファイルの追加、削除、リネイム)

25 ©2008. RENESAS Technology Corp., / Nobuhiro Iwamatsu All rights reserved.

$ git commit drivers/net/sh_eth.c -s

4. 問題がなければ、変更をコミットする$ git logcommit f36b59d1a4fa1e29be606d0513b5f7fa6e720f79Author: Nobuhiro Iwamatsu <[email protected]>Date: Thu Mar 26 08:32:37 2009 +0000

sh: Add MMU dependency for kexec Kexec is not likely to work on NON-MMU CPU because this added depend on MMU for kexec. Signed-off-by: Nobuhiro Iwamatsu \ <[email protected]>

diff --git a/arch/sh/Kconfig b/arch/sh/Kconfigindex 8d50d52..19566c8 100644--- a/arch/sh/Kconfig+++ b/arch/sh/Kconfig@@ -530,7 +530,7 @@ source kernel/Kconfig.hz config KEXEC

Page 26: Linuxカーネル開発者予備軍 のためのGit HowtoGit の基本的なコマンド git clone(リポジトリのコピー) git add/rm/mv(ファイルの追加、削除、リネイム)

26 ©2008. RENESAS Technology Corp., / Nobuhiro Iwamatsu All rights reserved.

4. 問題がなければ、変更をコミットする

0 1 2

0 1 2origin/master

ブランチ

0 1 2heads/masterブランチ

masterブランチ

sh-2.6リモートリポジトリ

ローカルリポジトリ

Page 27: Linuxカーネル開発者予備軍 のためのGit HowtoGit の基本的なコマンド git clone(リポジトリのコピー) git add/rm/mv(ファイルの追加、削除、リネイム)

27 ©2008. RENESAS Technology Corp., / Nobuhiro Iwamatsu All rights reserved.

4. 問題がなければ、変更をコミットする

0 1 2

0 1 2origin/master

ブランチ

0 1 2heads/masterブランチ

α

heads/masterにコミットされる

masterブランチ

sh-2.6リモートリポジトリ

ローカルリポジトリ

Page 28: Linuxカーネル開発者予備軍 のためのGit HowtoGit の基本的なコマンド git clone(リポジトリのコピー) git add/rm/mv(ファイルの追加、削除、リネイム)

28 ©2008. RENESAS Technology Corp., / Nobuhiro Iwamatsu All rights reserved.

$ git remote update

5. 修正している間にリモートリポジトリが更新されている可能性があるので、リモートリポジトリの状態をアップデートする

Page 29: Linuxカーネル開発者予備軍 のためのGit HowtoGit の基本的なコマンド git clone(リポジトリのコピー) git add/rm/mv(ファイルの追加、削除、リネイム)

29 ©2008. RENESAS Technology Corp., / Nobuhiro Iwamatsu All rights reserved.

5. 修正している間にリモートリポジトリが更新されている可能性があるので、リモートリポジトリの状態をアップデートする

0 1 2

0 1 2origin/master

ブランチ

0 1 2heads/masterブランチ

α

masterブランチ

sh-2.6リモートリポジトリ

ローカルリポジトリ

Page 30: Linuxカーネル開発者予備軍 のためのGit HowtoGit の基本的なコマンド git clone(リポジトリのコピー) git add/rm/mv(ファイルの追加、削除、リネイム)

30 ©2008. RENESAS Technology Corp., / Nobuhiro Iwamatsu All rights reserved.

5. 修正している間にリモートリポジトリが更新されている可能性があるので、リモートリポジトリの状態をアップデートする

0 1 2origin/master

ブランチ

0 1 2heads/masterブランチ

α

masterブランチ

sh-2.6リモートリポジトリ

ローカルリポジトリ

0 1 2 43

Page 31: Linuxカーネル開発者予備軍 のためのGit HowtoGit の基本的なコマンド git clone(リポジトリのコピー) git add/rm/mv(ファイルの追加、削除、リネイム)

31 ©2008. RENESAS Technology Corp., / Nobuhiro Iwamatsu All rights reserved.

5. 修正している間にリモートリポジトリが更新されている可能性があるので、リモートリポジトリの状態をアップデートする

0 1 2origin/master

ブランチ

0 1 2heads/masterブランチ

α

masterブランチ

sh-2.6リモートリポジトリ

ローカルリポジトリ

0 1 2 43

git remote update

Page 32: Linuxカーネル開発者予備軍 のためのGit HowtoGit の基本的なコマンド git clone(リポジトリのコピー) git add/rm/mv(ファイルの追加、削除、リネイム)

32 ©2008. RENESAS Technology Corp., / Nobuhiro Iwamatsu All rights reserved.

5. 修正している間にリモートリポジトリが更新されている可能性があるので、リモートリポジトリの状態をアップデートする

origin/masterブランチ

0 1 2heads/masterブランチ

α

masterブランチ

sh-2.6リモートリポジトリ

ローカルリポジトリ

0 1 2 43

git remote update

0 1 2 43

Page 33: Linuxカーネル開発者予備軍 のためのGit HowtoGit の基本的なコマンド git clone(リポジトリのコピー) git add/rm/mv(ファイルの追加、削除、リネイム)

33 ©2008. RENESAS Technology Corp., / Nobuhiro Iwamatsu All rights reserved.

$ git rebase origin※git pull –-rebase でも可能

6. リモートリポジトリの状態に対してrebaseを行う

● ソースコードのマージには2種類ある● git rebase は指定したブランチをベースに自分 の修正を追加するコマンド

● Git merge は指定したブランチの修正を自分の ブランチに追加するコマンド

Page 34: Linuxカーネル開発者予備軍 のためのGit HowtoGit の基本的なコマンド git clone(リポジトリのコピー) git add/rm/mv(ファイルの追加、削除、リネイム)

34 ©2008. RENESAS Technology Corp., / Nobuhiro Iwamatsu All rights reserved.

6. リモートリポジトリの状態に対してrebaseを行う

origin/masterブランチ

0 1 2heads/masterブランチ

α

masterブランチ

sh-2.6リモートリポジトリ

ローカルリポジトリ

0 1 2 43

0 1 2 43

Page 35: Linuxカーネル開発者予備軍 のためのGit HowtoGit の基本的なコマンド git clone(リポジトリのコピー) git add/rm/mv(ファイルの追加、削除、リネイム)

35 ©2008. RENESAS Technology Corp., / Nobuhiro Iwamatsu All rights reserved.

6. リモートリポジトリの状態に対してrebaseを行う

origin/masterブランチ

0 1 2heads/masterブランチ

α

masterブランチ

ローカルリポジトリ

0 1 2 43

git rebase origin

0 1 2 43

sh-2.6リモートリポジトリ

Page 36: Linuxカーネル開発者予備軍 のためのGit HowtoGit の基本的なコマンド git clone(リポジトリのコピー) git add/rm/mv(ファイルの追加、削除、リネイム)

36 ©2008. RENESAS Technology Corp., / Nobuhiro Iwamatsu All rights reserved.

6. リモートリポジトリの状態に対してrebaseを行う

origin/masterブランチ

heads/masterブランチ

masterブランチ

ローカルリポジトリ

0 1 2 43

git rebase origine

0 1 2 43

0 1 2 43 α

sh-2.6リモートリポジトリ

Page 37: Linuxカーネル開発者予備軍 のためのGit HowtoGit の基本的なコマンド git clone(リポジトリのコピー) git add/rm/mv(ファイルの追加、削除、リネイム)

37 ©2008. RENESAS Technology Corp., / Nobuhiro Iwamatsu All rights reserved.

6. リモートリポジトリの状態に対してrebaseを行う

origin/masterブランチ

0 1 2heads/masterブランチ

α

masterブランチ

ローカルリポジトリ

0 1 2 43

git merge origin/master

0 1 2 43

sh-2.6リモートリポジトリ

Page 38: Linuxカーネル開発者予備軍 のためのGit HowtoGit の基本的なコマンド git clone(リポジトリのコピー) git add/rm/mv(ファイルの追加、削除、リネイム)

38 ©2008. RENESAS Technology Corp., / Nobuhiro Iwamatsu All rights reserved.

6. リモートリポジトリの状態に対してrebaseを行う

origin/masterブランチ

0 1 2heads/masterブランチ

α

masterブランチ

ローカルリポジトリ

0 1 2 43

git merge origin/master

0 1 2 43

2 43

X

sh-2.6リモートリポジトリ

Page 39: Linuxカーネル開発者予備軍 のためのGit HowtoGit の基本的なコマンド git clone(リポジトリのコピー) git add/rm/mv(ファイルの追加、削除、リネイム)

39 ©2008. RENESAS Technology Corp., / Nobuhiro Iwamatsu All rights reserved.

7. 再度テスト$ make ARCH=sh CROSS_COMPILE=sh4-linux-gnu-\ -j8$ 実機でテスト

Page 40: Linuxカーネル開発者予備軍 のためのGit HowtoGit の基本的なコマンド git clone(リポジトリのコピー) git add/rm/mv(ファイルの追加、削除、リネイム)

40 ©2008. RENESAS Technology Corp., / Nobuhiro Iwamatsu All rights reserved.

$ git format-patch -o ../ origin../0001-sh-Add-MMU-dependency-for-kexec.patch

8. git format-patchコマンドでコミットからパッチメールを作成

Page 41: Linuxカーネル開発者予備軍 のためのGit HowtoGit の基本的なコマンド git clone(リポジトリのコピー) git add/rm/mv(ファイルの追加、削除、リネイム)

41 ©2008. RENESAS Technology Corp., / Nobuhiro Iwamatsu All rights reserved.

$ cat \../0001-sh-Add-MMU-dependency-for-kexec.patchFrom f36b59d1a4fa1e29be606d0513b5f7fa6e720f79 Mon Sep 17 00:00:00 2001From: Nobuhiro Iwamatsu <[email protected]>Date: Thu, 26 Mar 2009 08:32:37 +0000Subject: [PATCH] sh: Add MMU dependency for kexec

Kexec is not likely to work on NON-MMU CPU because this addeddepend on MMU for kexec.

Signed-off-by: Nobuhiro Iwamatsu <[email protected]>--- arch/sh/Kconfig | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/arch/sh/Kconfig b/arch/sh/Kconfigindex 8d50d52..19566c8 100644--- a/arch/sh/Kconfig+++ b/arch/sh/Kconfig@@ -530,7 +530,7 @@ source kernel/Kconfig.hz.....

8. git format-patchコマンドでコミットからパッチメールを作成

Page 42: Linuxカーネル開発者予備軍 のためのGit HowtoGit の基本的なコマンド git clone(リポジトリのコピー) git add/rm/mv(ファイルの追加、削除、リネイム)

42 ©2008. RENESAS Technology Corp., / Nobuhiro Iwamatsu All rights reserved.

8. git format-patchコマンドでコミットからパッチメールを作成

origin/masterブランチ

heads/masterブランチ

masterブランチ

sh-2.6リモートリポジトリ

ローカルリポジトリ

0 1 2 43

0 1 2 43

0 1 2 43 α

現在のブランチとoriginとの差分を出力

Page 43: Linuxカーネル開発者予備軍 のためのGit HowtoGit の基本的なコマンド git clone(リポジトリのコピー) git add/rm/mv(ファイルの追加、削除、リネイム)

43 ©2008. RENESAS Technology Corp., / Nobuhiro Iwamatsu All rights reserved.

$ git send-email \–-to [email protected] \–-cc [email protected] \ ../0001-sh-Add-MMU-dependency-for-kexec.patch

9. 作成したパッチをメーリングリストに投稿する

Page 44: Linuxカーネル開発者予備軍 のためのGit HowtoGit の基本的なコマンド git clone(リポジトリのコピー) git add/rm/mv(ファイルの追加、削除、リネイム)

44 ©2008. RENESAS Technology Corp., / Nobuhiro Iwamatsu All rights reserved.

2.2. 最新機能を試す

● 最新のドライバとか● 最新の機能とか● 試したい事があるというか、試す必要がある場

合がある● どのようにするか

Page 45: Linuxカーネル開発者予備軍 のためのGit HowtoGit の基本的なコマンド git clone(リポジトリのコピー) git add/rm/mv(ファイルの追加、削除、リネイム)

45 ©2008. RENESAS Technology Corp., / Nobuhiro Iwamatsu All rights reserved.

例) sh-2.6のリポジトリをベースにしたブランチにbluetoothドライ

バのコードをマージしてテストをする

Page 46: Linuxカーネル開発者予備軍 のためのGit HowtoGit の基本的なコマンド git clone(リポジトリのコピー) git add/rm/mv(ファイルの追加、削除、リネイム)

46 ©2008. RENESAS Technology Corp., / Nobuhiro Iwamatsu All rights reserved.

1. リモートリポジトリを追加する

BluetoothのGitリポジトリは

MAINTAINERS ファイルに書いてある

BLUETOOTH SUBSYSTEMP: Marcel HoltmannM: [email protected]: [email protected]: http://www.bluez.org/T: git git://git.kernel.org/pub/scm/linux/kernel/git/holtmann/bluetooth-2.6.git

Page 47: Linuxカーネル開発者予備軍 のためのGit HowtoGit の基本的なコマンド git clone(リポジトリのコピー) git add/rm/mv(ファイルの追加、削除、リネイム)

47 ©2008. RENESAS Technology Corp., / Nobuhiro Iwamatsu All rights reserved.

$ git remote add bluetooth \ git://git.kernel.org/pub/scm/linux/kernel/git/holtmann/bluetooth-2.6.git

1. リモートリポジトリを追加する

git remote コマンドでリモートリポジトリを追加

Page 48: Linuxカーネル開発者予備軍 のためのGit HowtoGit の基本的なコマンド git clone(リポジトリのコピー) git add/rm/mv(ファイルの追加、削除、リネイム)

48 ©2008. RENESAS Technology Corp., / Nobuhiro Iwamatsu All rights reserved.

1. リモートリポジトリを追加する

0 1 2

0 1 2origin/master

ブランチ

0 1 2heads/masterブランチ

masterブランチ

sh-2.6リモートリポジトリ

ローカルリポジトリ

0 A Bmasterブランチ

Bluetoothリモートリポジトリ

Page 49: Linuxカーネル開発者予備軍 のためのGit HowtoGit の基本的なコマンド git clone(リポジトリのコピー) git add/rm/mv(ファイルの追加、削除、リネイム)

49 ©2008. RENESAS Technology Corp., / Nobuhiro Iwamatsu All rights reserved.

1. リモートリポジトリを追加する

0 1 2

0 1 2origin/master

ブランチ

0 1 2heads/masterブランチ

masterブランチ

ローカルリポジトリ

0 A Bmasterブランチ

Bluetoothリモートリポジトリ

sh-2.6リモートリポジトリ

Page 50: Linuxカーネル開発者予備軍 のためのGit HowtoGit の基本的なコマンド git clone(リポジトリのコピー) git add/rm/mv(ファイルの追加、削除、リネイム)

50 ©2008. RENESAS Technology Corp., / Nobuhiro Iwamatsu All rights reserved.

1. リモートリポジトリを追加する

0 1 2

0 1 2origin/master

ブランチ

0 1 2heads/masterブランチ

masterブランチ

ローカルリポジトリ

0 A Bmasterブランチ

Bluetoothリモートリポジトリ

0 1 2

git remote add

sh-2.6リモートリポジトリ

Page 51: Linuxカーネル開発者予備軍 のためのGit HowtoGit の基本的なコマンド git clone(リポジトリのコピー) git add/rm/mv(ファイルの追加、削除、リネイム)

51 ©2008. RENESAS Technology Corp., / Nobuhiro Iwamatsu All rights reserved.

1. リモートリポジトリを追加する

0 1 2

0 1 2origin/master

ブランチ

0 1 2heads/masterブランチ

masterブランチ

ローカルリポジトリ

0 A Bmasterブランチ

Bluetoothリモートリポジトリ

0 1 2

bluetooth

git remote add

sh-2.6リモートリポジトリ

Page 52: Linuxカーネル開発者予備軍 のためのGit HowtoGit の基本的なコマンド git clone(リポジトリのコピー) git add/rm/mv(ファイルの追加、削除、リネイム)

52 ©2008. RENESAS Technology Corp., / Nobuhiro Iwamatsu All rights reserved.

$ git remote update bluetoothUpdating bluetoothFrom git://git.kernel.org/pub/scm/linux/kernel/git/holtmann/bluetooth-2.6.git * [new branch] master -> \ bluetooth/master

2.リモートリポジトリの状態をアップデートする

Page 53: Linuxカーネル開発者予備軍 のためのGit HowtoGit の基本的なコマンド git clone(リポジトリのコピー) git add/rm/mv(ファイルの追加、削除、リネイム)

53 ©2008. RENESAS Technology Corp., / Nobuhiro Iwamatsu All rights reserved.

2.リモートリポジトリの状態をアップデートする

0 1 2

0 1 2origin/master

ブランチ

0 1 2heads/masterブランチ

masterブランチ

ローカルリポジトリ

0 A Bmasterブランチ

Bluetoothリモートリポジトリ

0 1 2

git remote update bluetooth

bluetooth

sh-2.6リモートリポジトリ

Page 54: Linuxカーネル開発者予備軍 のためのGit HowtoGit の基本的なコマンド git clone(リポジトリのコピー) git add/rm/mv(ファイルの追加、削除、リネイム)

54 ©2008. RENESAS Technology Corp., / Nobuhiro Iwamatsu All rights reserved.

2.リモートリポジトリの状態をアップデートする

0 1 2

0 1 2origin/master

ブランチ

0 1 2heads/masterブランチ

masterブランチ

ローカルリポジトリ

0 A Bmasterブランチ

Bluetoothリモートリポジトリ

0 1 2

bluetooth/masterブランチ

git remote update bluetooth

0 A B

sh-2.6リモートリポジトリ

Page 55: Linuxカーネル開発者予備軍 のためのGit HowtoGit の基本的なコマンド git clone(リポジトリのコピー) git add/rm/mv(ファイルの追加、削除、リネイム)

55 ©2008. RENESAS Technology Corp., / Nobuhiro Iwamatsu All rights reserved.

$ git branch* master$ git merge bluetooth/masterMerge made by recursive.Counting objects: 976200, done.Delta compression using up to 4 threads.Compressing objects: 100% (147281/147281), done.Writing objects: 100% (976200/976200), done.Total 976200 (delta 846940), reused 947801 (delta 820079).........

3.bluetoothの変更をmasterブランチに取り込む

Page 56: Linuxカーネル開発者予備軍 のためのGit HowtoGit の基本的なコマンド git clone(リポジトリのコピー) git add/rm/mv(ファイルの追加、削除、リネイム)

56 ©2008. RENESAS Technology Corp., / Nobuhiro Iwamatsu All rights reserved.

3.bluetoothの変更をmasterブランチに取り込む

0 1 2

0 1 2origin/master

ブランチ

0 1 2heads/masterブランチ

masterブランチ

ローカルリポジトリ

0 A Bmasterブランチ

Bluetoothリモートリポジトリ

0 1 2

bluetooth/masterブランチ

git merge bluetooth/master

0 A B

sh-2.6リモートリポジトリ

Page 57: Linuxカーネル開発者予備軍 のためのGit HowtoGit の基本的なコマンド git clone(リポジトリのコピー) git add/rm/mv(ファイルの追加、削除、リネイム)

57 ©2008. RENESAS Technology Corp., / Nobuhiro Iwamatsu All rights reserved.

3.bluetoothの変更をmasterブランチに取り込む

0 1 2

0 1 2origin/master

ブランチ

0 1 2heads/masterブランチ

masterブランチ

ローカルリポジトリ

0 A Bmasterブランチ

Bluetoothリモートリポジトリ

0 1 2

bluetooth/masterブランチ

git merge bluetooth/master

0 A B

A B

X

sh-2.6リモートリポジトリ

Page 58: Linuxカーネル開発者予備軍 のためのGit HowtoGit の基本的なコマンド git clone(リポジトリのコピー) git add/rm/mv(ファイルの追加、削除、リネイム)

58 ©2008. RENESAS Technology Corp., / Nobuhiro Iwamatsu All rights reserved.

$ git show HEADcommit 52b4ab9e6629884bf2a3f34dae5367a7ef5e9b4fMerge: 138f025 4c71318Author: Nobuhiro Iwamatsu <[email protected]>Date: Thu Jun 11 16:23:38 2009 +0900

Merge commit 'bluetooth/master' into master

3.bluetoothの変更をmasterブランチに取り込む

Page 59: Linuxカーネル開発者予備軍 のためのGit HowtoGit の基本的なコマンド git clone(リポジトリのコピー) git add/rm/mv(ファイルの追加、削除、リネイム)

59 ©2008. RENESAS Technology Corp., / Nobuhiro Iwamatsu All rights reserved.

$ git show HEADcommit 52b4ab9e6629884bf2a3f34dae5367a7ef5e9b4fMerge: 138f025 4c71318Author: Nobuhiro Iwamatsu <[email protected]>Date: Thu Jun 11 16:23:38 2009 +0900

Merge commit 'bluetooth/master' into master

3.bluetoothの変更をmasterブランチに取り込む

Page 60: Linuxカーネル開発者予備軍 のためのGit HowtoGit の基本的なコマンド git clone(リポジトリのコピー) git add/rm/mv(ファイルの追加、削除、リネイム)

60 ©2008. RENESAS Technology Corp., / Nobuhiro Iwamatsu All rights reserved.

3.bluetoothの変更をmasterブランチに取り込む

0 1 2

0 1 2origin/master

ブランチ

0 1 2heads/masterブランチ

masterブランチ

sh-2.6リモートリポジトリ

ローカルリポジトリ

0 A Bmasterブランチ

Bluetoothリモートリポジトリ

0 1 2

bluetooth/masterブランチ

git merge bluetooth/master

0 A B

A B

X

Page 61: Linuxカーネル開発者予備軍 のためのGit HowtoGit の基本的なコマンド git clone(リポジトリのコピー) git add/rm/mv(ファイルの追加、削除、リネイム)

61 ©2008. RENESAS Technology Corp., / Nobuhiro Iwamatsu All rights reserved.

$ make ARCH=sh CROSS_COMPILE=sh4-linux-gnu-\ -j8$ 実機でテスト

4. テストを行う

Page 62: Linuxカーネル開発者予備軍 のためのGit HowtoGit の基本的なコマンド git clone(リポジトリのコピー) git add/rm/mv(ファイルの追加、削除、リネイム)

62 ©2008. RENESAS Technology Corp., / Nobuhiro Iwamatsu All rights reserved.

$ git reset –-hard origin/master

5. masterブランチを元に戻す

Page 63: Linuxカーネル開発者予備軍 のためのGit HowtoGit の基本的なコマンド git clone(リポジトリのコピー) git add/rm/mv(ファイルの追加、削除、リネイム)

63 ©2008. RENESAS Technology Corp., / Nobuhiro Iwamatsu All rights reserved.

5. masterブランチを元に戻す

0 1 2

0 1 2origin/master

ブランチ

0 1 2heads/masterブランチ

masterブランチ

ローカルリポジトリ

0 A Bmasterブランチ

Bluetoothリモートリポジトリ

0 1 2

bluetooth/masterブランチ

0 A B

A B

X

sh-2.6リモートリポジトリ

Page 64: Linuxカーネル開発者予備軍 のためのGit HowtoGit の基本的なコマンド git clone(リポジトリのコピー) git add/rm/mv(ファイルの追加、削除、リネイム)

64 ©2008. RENESAS Technology Corp., / Nobuhiro Iwamatsu All rights reserved.

5. masterブランチを元に戻す

0 1 2

0 1 2origin/master

ブランチ

0 1 2heads/masterブランチ

masterブランチ

ローカルリポジトリ

0 A Bmasterブランチ

Bluetoothリモートリポジトリ

0 1 2

bluetooth/masterブランチ

0 A B

リセットする

sh-2.6リモートリポジトリ

Page 65: Linuxカーネル開発者予備軍 のためのGit HowtoGit の基本的なコマンド git clone(リポジトリのコピー) git add/rm/mv(ファイルの追加、削除、リネイム)

65 ©2008. RENESAS Technology Corp., / Nobuhiro Iwamatsu All rights reserved.

まとめ

● リモートリポジトリとローカルリポジトリを理解しましょう

● パッチを送るときは rebaseして最新のコミットに対してのパッチを送るようにしましょう

● リモートリポジトリは git remote を使うと楽です

● merge と rebase は使い分けましょう

Page 66: Linuxカーネル開発者予備軍 のためのGit HowtoGit の基本的なコマンド git clone(リポジトリのコピー) git add/rm/mv(ファイルの追加、削除、リネイム)

66 ©2008. RENESAS Technology Corp., / Nobuhiro Iwamatsu All rights reserved.

その他知っておくとよい事

● Git オブジェクトの仕組み● index の動き● コンフリクト時の復旧方法● git bisect/ blame の使い方

Page 67: Linuxカーネル開発者予備軍 のためのGit HowtoGit の基本的なコマンド git clone(リポジトリのコピー) git add/rm/mv(ファイルの追加、削除、リネイム)

67 ©2008. RENESAS Technology Corp., / Nobuhiro Iwamatsu All rights reserved.

質疑応答

Page 68: Linuxカーネル開発者予備軍 のためのGit HowtoGit の基本的なコマンド git clone(リポジトリのコピー) git add/rm/mv(ファイルの追加、削除、リネイム)

68 ©2008. RENESAS Technology Corp., / Nobuhiro Iwamatsu All rights reserved.

ご清聴ありがとうございました。