• Immutable Page
  • Info
  • Attachments

Kernel Hackers' guide to git

This page is come from Jeff Garzik's "Kernel Hackers' guide to git" translated into Japanese.

このページは Jeff Garzik の "Kernel Hackers' guide to git" を翻訳したものです。http://linux.yyz.us/git-howto.html

  1. 最初に
    1. git のインストール
    2. 最初の段階での linux kernel ツリーのダウンロード
  2. 基本操作
    1. ローカルカーネルツリーを最新の 2.6.x upstream に更新する("fast-forward merge")
    2. 全てのローカルな修正を元に戻す
    3. あなたの修正を checkin する (例: ハッキングもしくはパッチ適用)
    4. 作業ディレクトリの全ての変更をdiff形式で表示する
    5. 作業ディレクトリの全ての変更について要約を得る
    6. すべての変更をリストする
    7. 指定したファイルに関連する全ての変更をリストする
  3. ブランチ
    1. 全てのブランチをリストする
    2. 作業ディレクトリで望みのブランチをカレントに設定する
    3. 新ブランチを作り、カレントに設定する
    4. どのブランチがカレントか調べる
    5. カレントブランチとマスターブランチの diff を得る
    6. カレントブランチとマスターブランチの変更のリストを得る
    7. 1つのブランチの変更を別のものにマージする
  4. いろいろなこと
    1. バークレイ mbox形式ファイルにあるすべてのパッチを適用
    2. tag をダウンロードすることを忘れないように

最初に

git のインストール

Git を利用するには、git.git (Git リポジトリ)からチェックアウトをして、インストールし、その後linux-2.6.gti(カーネルリポジトリ)をチェックアウトするというような順のブートストラッピングが必要です(訳注:linux カーネルのハッキングを git を利用して行うためには、まず最新の gitソース を git リポジトリから git を使って取り出すということをしないといけない、ということを言おうとしています。なので...) あなたのディストリビューションがすでに、利用可能な git のバージョンを提供していてるのであれば、それを最初に使ってみてください。

  • Fedora Core 3 とそれ以降では: git-core パッケージは Feroda Extras にあります

    • . yum install git-core

もしあなたのディストロがパッケージを用意していない場合には、gitのソースコードの daily スナップショットをダウンロードすることから始める必要があります。

最新の安定版のダウンロード先は: http://www.kernel.org/pub/software/scm/git/

tarball をビルドするために依存するのは: zlib, libucurl, libcrypto,(openssl) です

tar ball をインストールするには:

アンパック & make & sudo make prefix=/usr/local install

この残りのドキュメントを読んだ後、戻ってきて、現在のgit を最新の git に更新してください。最新版は以下にあります:

git://git.kernel.org/pub/scm/git/git.git

最初の段階での linux kernel ツリーのダウンロード

$ git-clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git linux-2.6

備考:カーネルツリーはとても大きいので、これは数100MBのデータになることがあります。


基本操作

ローカルカーネルツリーを最新の 2.6.x upstream に更新する("fast-forward merge")

$ cd linux-2.6

$ git pull git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git

全てのローカルな修正を元に戻す

$ git checkout -f

あなたの修正を checkin する (例: ハッキングもしくはパッチ適用)

# リポジトリに移動する

$ cd linux-2.6

# 修正をする

$ vi drivers/net/sk98lin/skdim.c

#注:ファイルを追加したり削除した場合は、git-add と git-rm を実行すること

# すべての修正をチェックインする

$ git commint -a

作業ディレクトリの全ての変更をdiff形式で表示する

最後の git-update-index からの変更を表示

$ git diff

最後のcommit からの変更を表示

$ git diff HEAD

作業ディレクトリの全ての変更について要約を得る

$ git status

すべての変更をリストする

$ git log

指定したファイルに関連する全ての変更をリストする

(このケースでは net/ieee80211/ieeee80211_module.c)

$ git-whatchanged net/ieee80211/ieee80211_module.c


ブランチ

全てのブランチをリストする

$ git branch

作業ディレクトリで望みのブランチをカレントに設定する

$ git checkout $branch

新ブランチを作り、カレントに設定する

$ git checkout -b my-new-branch-name master

どのブランチがカレントか調べる

$ git branch

(ブランチに * が付いていつものがカレント)

カレントブランチとマスターブランチの diff を得る

大抵のブランチ付きツリーでは diff やマージを簡単に行うため、 .git/refs/heads/master には現状の 'バニラ'upstream ツリーが格納されている (ブランチが無いツリーの場合、マスターには 単にあなたの最新の変更が 格納されている)

$ git diff master..HEAD

(これは git diff HEAD と同じ、HEADブランチを使っている場合)

カレントブランチとマスターブランチの変更のリストを得る

$ git log master..HEAD

(これは git log と同じ、HEAD ブランチを使っている場合)

changeset の全記述を得る代わりに、各変更の1行サマリを得るには:

$ git log master..HEAD | git shortlog

1つのブランチの変更を別のものにマージする

あなたがブランチA と ブランチB で作業していたとして、これらの2つのブラ ンチでの作業が終了した後、これらの作業をブランチM にマージすることを想定。

$ git chekout M             # ブランチM にスイッチ

$ git pull . A              # A を M にマージ

$ git pull . B              # B を M にマージ


いろいろなこと

バークレイ mbox形式ファイルにあるすべてのパッチを適用

最初に、git-core リポジトリの tools サブディレクトリがあなたのPATH に 設定されていることを確認して。

$ cd my-kernel-tree-2.6

$ git-applymbox /path/to/mbox /path/to/signoff.txt

ファイル /path/to/mbox はバークレイ mbox ファイルで、git リポジトリに コミットされるべき 1つかそれ以上のパッチが含まれている。ここではオプションとして、ファイル /path/to/signoff.txt を指定している。これは各 changeset の記述に追加する内容を記したテキストファイルである。Linux カーネルの場合、全ての変更の提案には以下のような行を含めるのが一般的である。

Signed-off-by: Your Name <your@email.com>

この行はほぼ全てのカーネルへの提案に共通。

tag をダウンロードすることを忘れないように

git pull は sha1-inedxed オブジェクトデータと要求されたリモートhead を ダウンロードするだけである。これでは、.git/refs/tags と .git/refs/head/ ディレクトリの更新はされない。 タグについては、 git pull --tags を実施する。

Tell others about this page:

last edited 2007-08-30 14:19:10 by TsugikazuShibata