「Git チュートリアル」の版間の差分
ナビゲーションに移動
検索に移動
(同じ利用者による、間の1版が非表示) | |||
1行目: | 1行目: | ||
− | ==Git チュートリアル== | + | ==[[Git チュートリアル]]== |
− | [[Git]] | + | [[Git]] | |
*この本からのメモ | *この本からのメモ | ||
{{amazon|427406767X}} | {{amazon|427406767X}} | ||
6行目: | 6行目: | ||
==リポジトリの作成== | ==リポジトリの作成== | ||
− | *subversion などたいていのVCSはリポジトリと作業ツリーは別の場所にあるが、Gitでは、どちらも.git ディレクトリに存在する | + | *[[subversion]] などたいていのVCSはリポジトリと作業ツリーは別の場所にあるが、Gitでは、どちらも.git ディレクトリに存在する |
− | * | + | *[[Git]]でリポジトリを作るには、まずプロジェクトコードを格納したい場所を決める(例として、mysite とする) |
*mysite ディレクトリを作成し、その中で git init とする | *mysite ディレクトリを作成し、その中で git init とする | ||
13行目: | 13行目: | ||
$ cd mysite | $ cd mysite | ||
$ git init | $ git init | ||
− | Initialized empty Git repository in /home/piroto/git_test/mysite/.git/ | + | Initialized empty [[Git]] repository in /home/piroto/git_test/mysite/.git/ |
*これでリポジトリが作成された | *これでリポジトリが作成された | ||
37行目: | 37行目: | ||
*コミットは、リポジトリに格納される1つ1つの履歴 | *コミットは、リポジトリに格納される1つ1つの履歴 | ||
*コミットでは、ユーザー名、メールアドレス、コミットメッセージが格納される | *コミットでは、ユーザー名、メールアドレス、コミットメッセージが格納される | ||
− | $ git commit -m "add in hello world HTML" | + | $ git commit -m "add in hello world [[HTML]]" |
[master (root-commit) 6b4f2e7] add in hello world HTML | [master (root-commit) 6b4f2e7] add in hello world HTML | ||
1 files changed, 5 insertions(+), 0 deletions(-) | 1 files changed, 5 insertions(+), 0 deletions(-) | ||
49行目: | 49行目: | ||
Date: Mon Dec 6 22:10:38 2010 +0900 | Date: Mon Dec 6 22:10:38 2010 +0900 | ||
− | add in hello world HTML | + | add in hello world [[HTML]] |
==プロジェクト作業の開始== | ==プロジェクト作業の開始== | ||
56行目: | 56行目: | ||
<html> | <html> | ||
<head> | <head> | ||
− | <title>Hello World in Git</title> | + | <title>Hello World in [[Git]]</title> |
</head> | </head> | ||
<body> | <body> | ||
63行目: | 63行目: | ||
</html> | </html> | ||
===git status=== | ===git status=== | ||
− | * | + | *作業ツリーを[[Git]]がどう認識しているか確認 |
*Changed but not updated (変更されているが更新されていない) に分類されているが、コミットするには、変更をステージ(stage)する必要がある | *Changed but not updated (変更されているが更新されていない) に分類されているが、コミットするには、変更をステージ(stage)する必要がある | ||
*ステージするとコミットの準備を整えたことになる | *ステージするとコミットの準備を整えたことになる | ||
76行目: | 76行目: | ||
no changes added to commit (use "git add" and/or "git commit -a") | no changes added to commit (use "git add" and/or "git commit -a") | ||
− | === | + | ===[[Git]]ではプロジェクトコードが保持される場所が3つある=== |
#作業ツリー | #作業ツリー | ||
#インデックス(ステージングエリア) | #インデックス(ステージングエリア) | ||
120行目: | 120行目: | ||
git branch [作りたいブランチの名前] [分岐元にしたいブランチの名前] | git branch [作りたいブランチの名前] [分岐元にしたいブランチの名前] | ||
=====例===== | =====例===== | ||
− | $ git branch | + | $ git branch [[R]]B_1.0 master |
− | *master は | + | *master は [[Git]]でのデフォルトブランチ名 |
− | * | + | *[[R]]B は [[R]]elease Branch の略 |
<blockquote>これで、リリース準備が整ったブランチが切り離せたので、影響をあたえずに変更できる</blockquote> | <blockquote>これで、リリース準備が整ったブランチが切り離せたので、影響をあたえずに変更できる</blockquote> | ||
− | ==== | + | ====[[HTML]]をさらに編集==== |
: | : | ||
<body> | <body> | ||
134行目: | 134行目: | ||
: | : | ||
====変更をコミット==== | ====変更をコミット==== | ||
− | * -a | + | * -a パラメータを付けて[[Git]]が変更があったと認識している全てをコミット |
git commit -a | git commit -a | ||
=====コメントの入力を促されるので、入力してエディタを終了させる===== | =====コメントの入力を促されるので、入力してエディタを終了させる===== | ||
151行目: | 151行目: | ||
*リリースバージョンのブランチに切り替えて修正を施してみる | *リリースバージョンのブランチに切り替えて修正を施してみる | ||
=====ブランチの切り替え===== | =====ブランチの切り替え===== | ||
− | $ git checkout | + | $ git checkout [[R]]B_1.0 |
− | Switched to branch ' | + | Switched to branch '[[R]]B_1.0' |
− | ==== | + | ====リリースバージョンの[[HTML]]を修正==== |
* meta タグを追加 | * meta タグを追加 | ||
<head> | <head> | ||
− | <title>Hello World in Git</title> | + | <title>Hello World in [[Git]]</title> |
− | <meta name="description" content="hello world in Git" /> | + | <meta name="description" content="hello world in [[Git]]" /> |
</head> | </head> | ||
====コミット==== | ====コミット==== | ||
169行目: | 169行目: | ||
*タグを打つことで、リポジトリの特定の時点に目印を付けて参照しやすくする。 | *タグを打つことで、リポジトリの特定の時点に目印を付けて参照しやすくする。 | ||
git [タグ名] [タグを打つポイント] | git [タグ名] [タグを打つポイント] | ||
− | $ git tag 1.0 | + | $ git tag 1.0 [[R]]B_1.0 |
====タグの一覧==== | ====タグの一覧==== | ||
*リポジトリにおけるタグの一覧 | *リポジトリにおけるタグの一覧 | ||
177行目: | 177行目: | ||
===リベース=== | ===リベース=== | ||
*以下のためには、git rebase コマンドを利用する | *以下のためには、git rebase コマンドを利用する | ||
− | <blockquote> | + | <blockquote>現時点で、ブランチが2つあり、それぞれが関知していないコミットを持っている。[[R]]B_1.0(リリース1.0) に変更がなされたことを、master ブランチ(リリース2.0向けの作業)にも知らせる必要がある。</blockquote> |
*ブランチから変更を取り出してきて、別のブランチの先頭で再生するのがリベース(rebase) | *ブランチから変更を取り出してきて、別のブランチの先頭で再生するのがリベース(rebase) | ||
=====この状態を===== | =====この状態を===== | ||
187行目: | 187行目: | ||
Switched to branch 'master' | Switched to branch 'master' | ||
=====rebase コマンドの実行===== | =====rebase コマンドの実行===== | ||
− | $ git rebase | + | $ git rebase [[R]]B_1.0 |
Current branch master is up to date. | Current branch master is up to date. | ||
=====ブランチの削除===== | =====ブランチの削除===== | ||
*リポジトリは、上記の下図の状態になったので、リリースブランチを削除する | *リポジトリは、上記の下図の状態になったので、リリースブランチを削除する | ||
− | * | + | *先ほど作ったタグが、[[R]]B_1.0 と同じコミットを指しているため、失うものはない |
*git branch -d で削除 | *git branch -d で削除 | ||
− | $ git branch -d | + | $ git branch -d [[R]]B_1.0 |
− | Deleted branch | + | Deleted branch [[R]]B_1.0 (was d0068a8). |
=====内容を確認===== | =====内容を確認===== | ||
$ cat index.html | $ cat index.html | ||
<html> | <html> | ||
<head> | <head> | ||
− | <title>Hello World in Git</title> | + | <title>Hello World in [[Git]]</title> |
− | <meta name="description" content="hello world in Git" /> | + | <meta name="description" content="hello world in [[Git]]" /> |
</head> | </head> | ||
<body> | <body> | ||
211行目: | 211行目: | ||
===タグからブランチを作る=== | ===タグからブランチを作る=== | ||
− | *リリースブランチ( | + | *リリースブランチ([[R]]B_1.0)を削除してしまったが、タグを指定してブランチを作成できる |
− | *タグ 1.0 から、 | + | *タグ 1.0 から、 [[R]]B_1.0.1 をブランチ |
− | $ git branch | + | $ git branch [[R]]B_1.0.1 1.0 |
===アーカイブ=== | ===アーカイブ=== | ||
258行目: | 258行目: | ||
*スピード重視の独自プロトコル | *スピード重視の独自プロトコル | ||
*9418ポートを使うのでファイアーウォールの設定が必要 | *9418ポートを使うのでファイアーウォールの設定が必要 | ||
− | * | + | *パスは、リポジトリだと見なすパスを[[Git]]サーバー起動時に指定するので、クライアントはリポジトリ名を指定 |
*多くの git:// は読み取り専用として、書き込みには、ssh:// を使うことが多い | *多くの git:// は読み取り専用として、書き込みには、ssh:// を使うことが多い | ||
git://[server][リポジトリ] | git://[server][リポジトリ] | ||
− | =====HTTP/ | + | =====[[HTTP]]/[[HTTP]]S===== |
*困ったときの最後のプロトコル | *困ったときの最後のプロトコル | ||
*効率的ではないが、厳格なファイアーウォールでも許可されていることが多い | *効率的ではないが、厳格なファイアーウォールでも許可されていることが多い | ||
268行目: | 268行目: | ||
==Subversion とのコマンド対比== | ==Subversion とのコマンド対比== | ||
{|class="wikitable" | {|class="wikitable" | ||
− | !subversion | + | ![[subversion]] |
!git | !git | ||
|- | |- | ||
301行目: | 301行目: | ||
==リモートでの作業== | ==リモートでの作業== | ||
− | *http://git-scm.com/book/ja/v1/Git-%E3%81%AE%E5%9F%BA%E6%9C%AC-%E3%83%AA%E3%83%A2%E3%83%BC%E3%83%88%E3%81%A7%E3%81%AE%E4%BD%9C%E6%A5%AD | + | *http://git-scm.com/book/ja/v1/[[Git]]-%E3%81%AE%E5%9F%BA%E6%9C%AC-%E3%83%AA%E3%83%A2%E3%83%BC%E3%83%88%E3%81%A7%E3%81%AE%E4%BD%9C%E6%A5%AD |
*http://naokirin.hatenablog.com/entry/20111201/1322576109 | *http://naokirin.hatenablog.com/entry/20111201/1322576109 | ||
317行目: | 317行目: | ||
===git remote add=== | ===git remote add=== | ||
*リモートリポジトリの追加 | *リモートリポジトリの追加 | ||
− | *新しいリモート Git リポジトリにアクセスしやすいような名前をつけて追加する | + | *新しいリモート [[Git]] リポジトリにアクセスしやすいような名前をつけて追加する |
git remote add [shortname] [url] | git remote add [shortname] [url] | ||
$ git remote | $ git remote |
2020年2月16日 (日) 04:26時点における最新版
目次
Git チュートリアル
Git |
- この本からのメモ
リポジトリの作成
- subversion などたいていのVCSはリポジトリと作業ツリーは別の場所にあるが、Gitでは、どちらも.git ディレクトリに存在する
- Gitでリポジトリを作るには、まずプロジェクトコードを格納したい場所を決める(例として、mysite とする)
- mysite ディレクトリを作成し、その中で git init とする
$ mkdir mysite $ cd mysite $ git init Initialized empty Git repository in /home/piroto/git_test/mysite/.git/
- これでリポジトリが作成された
- リポジトリのあらゆるメタデータを格納する .git ディレクトリ、mysite が リポジトリからチェックアウトしたソースの作業ツリーとなる
変更を加える
ファイル(index.html)の追加
index.html
<html> <body> <h1>Hello World.</h1> <body> </html>
リポジトリへの追加
- 2段階の手順
git add
- リポジトリへの追加を指示
- 1つ以上のファイル名を指定
$ git add index.html
git commit
- コミットの実行
- コミットは、リポジトリに格納される1つ1つの履歴
- コミットでは、ユーザー名、メールアドレス、コミットメッセージが格納される
$ git commit -m "add in hello world HTML" [master (root-commit) 6b4f2e7] add in hello world HTML 1 files changed, 5 insertions(+), 0 deletions(-) create mode 100644 index.html
git log
- コミットの確認
- 先頭行はコミット名、SHA-1のハッシュ値によりユニークに識別
$ git log commit 6b4f2e70a4e1950083000148ec8b625be8a86eee Author: YAGI Hiroto <piroto@ryujyu.typea.info> Date: Mon Dec 6 22:10:38 2010 +0900 add in hello world HTML
プロジェクト作業の開始
index.html の編集
- <head> と <title> を追加
<html> <head> <title>Hello World in Git</title> </head> <body> <h1>Hello World.</h1> </body> </html>
git status
- 作業ツリーをGitがどう認識しているか確認
- Changed but not updated (変更されているが更新されていない) に分類されているが、コミットするには、変更をステージ(stage)する必要がある
- ステージするとコミットの準備を整えたことになる
$ git status # On branch master # Changed but not updated: # (use "git add <file>..." to update what will be committed) # (use "git checkout -- <file>..." to discard changes in working directory) # # modified: index.html # no changes added to commit (use "git add" and/or "git commit -a")
Gitではプロジェクトコードが保持される場所が3つある
- 作業ツリー
- インデックス(ステージングエリア)
- リポジトリ
<blockquote>ステージングエリアは、作業ツリーとリポジトリの間にあるバッファ。リポジトリにコミットしたい変更だけをアレンジ。</blockquote>
変更をステージ(再度 git add)する
- Change to be commitd (コミットされる変更)に状態が変わる
$ git add index.html $ git status # On branch master # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # modified: index.html #
コミット
git commit
- -m パラメータは複数追加でき、それぞれ段落になる
$ git commit -m "add <head> and <title> to index" \ > -m "This allows for a more semantic document." [master 372e445] add <head> and <title> to index 1 files changed, 3 insertions(+), 0 deletions(-)
git log
- git log に数値を渡すことで、任意のコミットを表示できる
$ git log -1 commit 372e445146791569f4e2b68d04d730c58e6b2ec9 Author: YAGI Hiroto <piroto@ryujyu.typea.info> Date: Mon Dec 6 22:48:06 2010 +0900 add <head> and <title> to index This allows for a more semantic document.
ブランチ
2つの便利な使いかた
- プロジェクトの別バージョンを別ブランチにする
- 特別な機能を使うための目的別ブランチ
使いかた
ブランチを作る git branch
git branch [作りたいブランチの名前] [分岐元にしたいブランチの名前]
例
$ git branch RB_1.0 master *master は Gitでのデフォルトブランチ名
<blockquote>これで、リリース準備が整ったブランチが切り離せたので、影響をあたえずに変更できる</blockquote>
HTMLをさらに編集
: <body> <h1>Hello World.</h1> <ul> <li><a href="bio.html">BIografy</a></li> </u> </body> :
変更をコミット
- -a パラメータを付けてGitが変更があったと認識している全てをコミット
git commit -a
コメントの入力を促されるので、入力してエディタを終了させる
# Please enter the commit message for your changes. Lines starting # with '#' will be ignored, and an empty message aborts the commit. # # Committer: root <root@ryujyu.typea.info> # # On branch master # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # modified: index.html #
ブランチを切り替える git checkout
- リリースバージョンのブランチに切り替えて修正を施してみる
ブランチの切り替え
$ git checkout RB_1.0 Switched to branch 'RB_1.0'
リリースバージョンのHTMLを修正
- meta タグを追加
<head> <title>Hello World in Git</title> <meta name="description" content="hello world in Git" /> </head>
コミット
$ git commit -a
- エディタにより、メッセージの保存を行う
リリース
タグ
タグを打つ
- タグを打つことで、リポジトリの特定の時点に目印を付けて参照しやすくする。
git [タグ名] [タグを打つポイント] $ git tag 1.0 RB_1.0
タグの一覧
- リポジトリにおけるタグの一覧
$ git tag 1.0
リベース
- 以下のためには、git rebase コマンドを利用する
<blockquote>現時点で、ブランチが2つあり、それぞれが関知していないコミットを持っている。RB_1.0(リリース1.0) に変更がなされたことを、master ブランチ(リリース2.0向けの作業)にも知らせる必要がある。</blockquote>
- ブランチから変更を取り出してきて、別のブランチの先頭で再生するのがリベース(rebase)
この状態を
こうする
まずは、ブランチを切り替えて master ブランチに戻る
$ git checkout master Switched to branch 'master'
rebase コマンドの実行
$ git rebase RB_1.0 Current branch master is up to date.
ブランチの削除
- リポジトリは、上記の下図の状態になったので、リリースブランチを削除する
- 先ほど作ったタグが、RB_1.0 と同じコミットを指しているため、失うものはない
- git branch -d で削除
$ git branch -d RB_1.0 Deleted branch RB_1.0 (was d0068a8).
内容を確認
$ cat index.html <html> <head> <title>Hello World in Git</title> <meta name="description" content="hello world in Git" /> </head> <body> <h1>Hello World.</h1> <ul> <li><a href="bio.html">BIografy</a></li> </u> </body> </html>
タグからブランチを作る
$ git branch RB_1.0.1 1.0
アーカイブ
- アーカイブを作成するために、git archive コマンドが用意されている
tar ボールを作る
$ git archive --format=tar --prefix=mysite-1.0/ 1.0 | gzip > mysite-1.0.tar.gz $ ls index.html mysite-1.0.tar.gz
上記のパラメータの説明
パラメータ | 内容 |
---|---|
tarを出力することを伝えている | |
全体をmysite-1.0/ ディレクトリ以下に置くように指定している | |
1.0 | 使用するタグを指定している |
zip ファイルを作る
$ git archive --format=zip --prefix=mysite-1.0/ 1.0 > mysite-1.0.zip $ ls index.html mysite-1.0.zip
リモートリポジトリのクローンを作る
git clone
- リモートリポジトリで作業を始めるためには、git clone でクローンを作成する
- クローンとは、作業を始めるリポジトリの完全なコピー
プロトコル
SSH
- ドメイン名と、ユーザー名を付加する以外は、ファイルシステムから直接アクセスする場合と同様
ssh://[user]@[server][リポジトリのパス]
- 別クライアントからアクセスし、クローンを作成する例
git clone ssh://piroto@192.168.24.53/home/piroto/git_test/mysite
git
- スピード重視の独自プロトコル
- 9418ポートを使うのでファイアーウォールの設定が必要
- パスは、リポジトリだと見なすパスをGitサーバー起動時に指定するので、クライアントはリポジトリ名を指定
- 多くの git:// は読み取り専用として、書き込みには、ssh:// を使うことが多い
git://[server][リポジトリ]
HTTP/HTTPS
- 困ったときの最後のプロトコル
- 効率的ではないが、厳格なファイアーウォールでも許可されていることが多い
http://[server][リポジトリのパス]
Subversion とのコマンド対比
subversion | git |
---|---|
svnadmin create | git init |
svn checkout | git clone |
svn update | git pull |
svn add | git add |
svn commit | git add、git commit |
svn status | git status |
svn switch <branch> | git checkout <branch> |
svn merge <branch> | git merge <branch> |
svn revert <file> | git checkout <file> |
リモートでの作業
- http://git-scm.com/book/ja/v1/Git-%E3%81%AE%E5%9F%BA%E6%9C%AC-%E3%83%AA%E3%83%A2%E3%83%BC%E3%83%88%E3%81%A7%E3%81%AE%E4%BD%9C%E6%A5%AD
- http://naokirin.hatenablog.com/entry/20111201/1322576109
git init --bare
- bareオプションをつけた場合、bareリポジトリを作成します。
- bareリポジトリは、作業ファイルがなく、管理ファイルのみのリポジトリになります。
- コミットなどはそのリポジトリでは行われません。(というか行えない。)
- bareリポジトリは、サーバ側のリモートリポジトリとして使うリポジトリを作成する際に使用します。
# git init --bare hoge
- 通常リモートリポジトリはようにします。グループで共有するためには--shared=trueを指定しないといけないみたいです。
git remote add
- リモートリポジトリの追加
- 新しいリモート Git リポジトリにアクセスしやすいような名前をつけて追加する
git remote add [shortname] [url] $ git remote origin $ git remote add pb git://github.com/paulboone/ticgit.git $ git remote -v origin git://github.com/schacon/ticgit.git pb git://github.com/paulboone/ticgit.git
© 2006 矢木浩人