-
Notifications
You must be signed in to change notification settings - Fork 0
DNET_GitBasics
技術解説の意味が解らんかったので、やっぱ基本は大事。
| 用語 | 説明 |
|---|---|
| リポジトリ(Repository) | Gitで管理されるプロジェクトのデータの保管場所。ローカルリポジトリとリモートリポジトリがある。 |
| ワーキングツリー(Working Tree) | 実際に作業を行うディレクトリ。ここでファイルを編集し、変更を加える。 |
| インデックス(Index, Staging Area) | git add で追加された変更が一時的に保存される領域。コミット前の準備段階。 |
| HEAD | 現在チェックアウトされているブランチの最新のコミットを指すポインタ。 |
- リポジトリ(Repository)
http://www.backlog.jp/git-guide/intro/intro1_2.html-
ファイルやディレクトリの変更履歴を記録して管理する場所。
-
管理対象のファイルやディレクトリはrepositoryの下に置く。
-
local / remote
http://www.backlog.jp/git-guide/intro/intro1_3.html-
remote repository
サーバに配置して複数人で共有するためのrepository。 -
local repository
・ユーザ一人が利用する、自分の手元のマシン上に配置するrepository。
・local repositoryの内容はremote repositoryを経由して公開・取得する。
-
-
bare / non-bare
http://www.nekotricolor.com/entry/theory-of-bare-and-non-bare-repository-manage-wordpress-themes-with-git-
non-bare repository
ワーキングディレクトリを持つ。 -
bare repository
ワーキングディレクトリを持たない。更新情報だけを持っている。
-
-
| 用語 | 説明 |
|---|---|
| ブランチ(Branch) | コミットの履歴を分岐させる機能。開発の並行作業を可能にする。 |
| コミット(Commit) | インデックスに追加された変更を記録する操作。リポジトリの履歴として保存される。 |
| マージ(Merge) | 異なるブランチの変更を統合する操作。 |
| リベース(Rebase) | ブランチの基点を変更し、履歴を整理する操作。 |
| チェリーピック(Cherry-pick) | 特定のコミットのみを別のブランチに適用する操作。 |
| タグ(Tag) | 特定のコミットに名前を付ける機能。リリースバージョン管理などに使用される。 |
-
branch
http://www.backlog.jp/git-guide/stepup/stepup1_1.html-
branchは独立な開発ラインを意味する。
- 開発ラインは、ブランチの上にcommit(編集 / ステージ / commit)作業単位を積み上げる
- branchの開発ラインとは一連のcommit履歴を指す抽象概念
-
branch名
-
(remote)/(branch)
remoteのrepositoryのbranch -
(origin)/(branch)
cloneしたremoteのrepositoryのbranch
-
-
HEAD:現在使用しているbranchの先頭を表す名前
-
stash:ファイルの変更内容を一時的に記録しておく領域。
-
| 用語 | 説明 |
|---|---|
| リモート(Remote) | ネットワーク上にあるリポジトリ。GitHubやGitLabなどを指す。 |
| フェッチ(Fetch) | リモートリポジトリの最新の変更を取得するが、ローカルのブランチには適用しない操作。 |
| プル(Pull) | fetch + merge を行い、リモートの変更をローカルに適用する操作。 |
| プッシュ(Push) | ローカルリポジトリの変更をリモートリポジトリへ送信する操作。 |
| クローン(Clone) | リモートリポジトリをローカルに複製する操作。 |
| 用語 | 説明 |
|---|---|
| ログ(Log) | git log で過去のコミット履歴を表示するコマンド。 |
| リセット(Reset) | コミットの状態を過去の状態に戻す操作。--soft, --mixed, --hard などのオプションがある。 |
| リバート(Revert) | 既存のコミットを打ち消す新しいコミットを作成する操作。履歴を残しつつ修正できる。 |
| ステータス(Status) | git status で作業ツリーの状態を確認するコマンド。 |
| ディフ(Diff) | git diff で変更点を比較するコマンド。 |
| スタッシュ(Stash) | 作業中の変更を一時的に退避する機能。git stash で退避し、git stash pop で戻す。 |
-
分散バージョン管理システム (DVCS) として設計されているので、
- ローカルだけで作業できる(ローカルの作成にリモートが必要だが)。
- 後に要所・要所でローカルで作業してリモートと同期する。
-
従って、オフラインでの作業が可能。
Gitでは、すべてのオブジェクト(ファイル、ディレクトリ、コミットなど)にハッシュが関連付けられ、これを元にデータが管理される。
Gitのコミットはスナップショットで、差分ではない?
-
他のVCS (CVS、Subversionとその類を含む)は差分
- 各コミットでは、ファイルの変更点 (diff) のみ記録する方式
- 履歴を取得する際には前のバージョンから順番に差分を適用して復元する必要がある。
-
Gitはファイルのスナップショット
- 各コミットで全体のスナップショットを保存(変更ファイルの完全なコピー)
- 差分自体ではないが、内部的には効率的に差分を管理する仕組みとなっている。
- また、変更のないファイルについては前回のバージョンへの参照を持つ。
- 過去のバージョンの取得やブランチの切り替えが高速になる利点がある。
これにより、過去のバージョンの取得やブランチの切り替えが高速になる。
-
ブランチの統合はファイル間の差異をそれぞれマージしてコミットする。
-
マージでは、コンフリクトが無ければ自動的に行われる。マージ後、確認してコミット。
-
この際、2つの分岐をマージした結果のコミットを特別にマージコミットと呼ぶ。
-
なお、ブランチしたが実際には分岐していない場合はマージコミットされない(Fast-Forward Merge)。
-
従ってGitでは
- 分散開発が可能な仕組みとなっている。
- デメリットとしてコンフリクトが発生し得る。
- コンフリクトは手動でマージして解決する必要がある。
-
Gitにはローカルブランチとリモートブランチがある。
-
ローカルブランチ:
開発者のPC上に存在する作業用ブランチ、直接編集可能。 -
リモートブランチ:
- サーバー上に存在するチーム共有ブランチ、直接編集不可能。
- 直接編集ではなくローカルからリモートに変更をプッシュして編集する。
-
-
リモートをローカルにクローン
- 先ず、リモートのリポジトリをローカルにクローンする。
- リポジトリの変更履歴として、1〜複数のブランチが含まれる。
- ココではブランチにはMasterとMasterから分岐したFeatureがある状態とする。
-
ローカルブランチでリモートブランチをプルし(最新の変更を取り込み)ながら開発を遂行する。
- ローカルブランチでは、Featureブランチに対して開発を行う。
- プル=フェッチ+マージで、リモート、ローカルのブランチ間の変更を統合する(Master →(プル)→ Feature)。
- マージは既出で、フェッチとは、マージ前に変更を取得する行為。
-
ローカルブランチの変更をリモートブランチへプッシュ
-
プッシュはクローンの逆でローカルの変更履歴をリモートに同期する。
-
Masterをプッシュするか?Featureをプッシュするかでシナリオが異なる。
-
(Master →(プッシュ)→ Master)(Feature →(プッシュ)→ Feature)
-
ローカルでマージ(した場合、Masterをプッシュ
- ローカルでブランチをマージ(Feature →(マージ)→ Master)
- Masterブランチをプッシュすればそれで完了する。
-
リモートでマージ(する場合、Featureをプッシュ
- Featureをプッシュしプルリクエストを送る
- プルリクエストはGitではなくGitホスティング・サービスの機能
- コレでリモートのMasterにFeatureの変更の取り込みを要求する。
- プルリクエストは、リモートでプル(ではなくマージ)をリクエストする。
- コレによりリモートでブランチをマージする(Feature →(マージ)→ Master)
-
- Gitのグラフとは、変更履歴を表す有向非巡回グラフ
- グラフは、各コミットがノードとなり、親コミットへの参照(エッジ)を持つ。
- 変更履歴には単純な「コミット」や「分岐(ブランチ)」を「統合(マージ)」した「マージコミット」が含まれる。
- 修正済、ステージ済、コミット済
- スナップショットはコミット時にのみ作成される。
ファイルに変更を加えたが、databaseにそれがまだコミットされていない状態
次のスナップショットのコミットに加えるために、
現在のバージョンの修正されたファイルに印をつけている状態。
local databaseにデータが安全に格納されている状態
git status でファイルの状態を確認できる。
- 追跡されている (tracked)
- 追跡されてない (untracked)
- 変更されていない (unmodified)
- 変更されている (modified)
- ステージされている (staged)
プロジェクトのためのメタデータとオブジェクトのdatabaseがあるところ。
プロジェクトの一つのバージョンの単一checkout
- インデックス or ステージング・エリア と呼ばれる。
- 次のコミットに何が含まれるかに関しての情報を蓄えた一つのファイル。
- git addでファイルをステージング・エリアに追加できる。
-
Git の仕組みを5分で理解する! - Qiita
http://qiita.com/hshimo/items/ab91b99cd61724127aa7 -
サルでもわかるGit入門
〜バージョン管理を使いこなそう〜
どこでもプロジェクト管理バックログ
http://www.backlog.jp/git-guide/ -
Git のコマンドだけでなく、その仕組みを学ぶ
https://www.ibm.com/developerworks/jp/devops/library/d-learn-workings-git/ -
Git の基本 | アトラシアン Git チュートリアル
https://www.atlassian.com/ja/git/tutorial/git-basics
-
こっそり始めるGit/GitHub超入門
http://www.atmarkit.co.jp/ait/series/3190/-
(1):初心者でもWindowsやMacでできる、Gitのインストールと基本的な使い方
http://www.atmarkit.co.jp/ait/articles/1603/31/news026.html -
(2):“はじめのGit”――超基本的な作業フローと5つのコマンド
http://www.atmarkit.co.jp/ait/articles/1604/26/news019.html -
(3):ポインタ嫌いでも分かるGitブランチの基本――作成、確認、切り替え、masterにマージ、削除
http://www.atmarkit.co.jp/ait/articles/1606/10/news022.html -
(4):Gitでコンフリクトしても慌てるな!! 解消に向けた3つの基本作業
http://www.atmarkit.co.jp/ait/articles/1607/14/news020.html -
(5):Gitコミット現場あるある――やり直し、取り消し、変更したいときに使えるコマンド
http://www.atmarkit.co.jp/ait/articles/1608/27/news008.html -
(6):「softでもhardでもHEADとブランチを付けたまま」――git resetで作業の取り消し
http://www.atmarkit.co.jp/ait/articles/1610/27/news016.html -
(7):はじまりはいつもプルリク? GitリポジトリホスティングサービスGitHubとは
http://www.atmarkit.co.jp/ait/articles/1612/05/news022.html -
(8):2017年、GitHubを始めるために最低限知っておきたい各機能
http://www.atmarkit.co.jp/ait/articles/1701/05/news009.html -
(9):これでもう怖くない、Git/GitHubにおけるリモートリポジトリの作成、確認、変更、更新時の基本5コマンド
http://www.atmarkit.co.jp/ait/articles/1701/24/news141.html -
(10):GitHubを使うなら最低限知っておきたい、プルリクエストの送り方とレビュー、マージの基本
http://www.atmarkit.co.jp/ait/articles/1702/27/news022.html -
(11):開発者のタスク管理がしやすくなるGitHub Issuesの基本的な使い方
http://www.atmarkit.co.jp/ait/articles/1703/29/news021.html -
(12):開発者のスケジュール管理に超便利、GitHub Issues、Label、Milestone、Projects使いこなし術
http://www.atmarkit.co.jp/ait/articles/1704/28/news032.html -
(13):GitHubとSlackの連携の基本&知られざる便利機能Wiki、Releases、Graphs、Pulse
http://www.atmarkit.co.jp/ait/articles/1705/29/news027.html -
(14):たった3つで共存できる、Git/GitHubとSubversion(SVN)の連携、移行に関する基本操作
http://www.atmarkit.co.jp/ait/articles/1707/03/news024.html -
(終):【図解】git-flow、GitHub Flowを開発現場で使い始めるためにこれだけは覚えておこう
http://www.atmarkit.co.jp/ait/articles/1708/01/news015.html
-
-
Git - Documentation
https://git-scm.com/doc -
Git 使い始める
- 1.1 バージョン管理に関して
https://git-scm.com/book/ja/v2/%E4%BD%BF%E3%81%84%E5%A7%8B%E3%82%81%E3%82%8B-%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E7%AE%A1%E7%90%86%E3%81%AB%E9%96%A2%E3%81%97%E3%81%A6 - 1.2 Git - Git略史
https://git-scm.com/book/ja/v2/%E4%BD%BF%E3%81%84%E5%A7%8B%E3%82%81%E3%82%8B-Git%E7%95%A5%E5%8F%B2 - 1.3 Gitの基本
https://git-scm.com/book/ja/v2/%E4%BD%BF%E3%81%84%E5%A7%8B%E3%82%81%E3%82%8B-Git%E3%81%AE%E5%9F%BA%E6%9C%AC
- 1.1 バージョン管理に関して
-
Git - Documentation
https://git-scm.com/doc -
transitive.info - Home
http://transitive.info/
移行メモ
- 「追跡されてない (untraced)」は Git の用語としては
untrackedが正しいため修正した。- 「従ってGitHub」は、続く箇条書きが Git 自体の性質 (分散開発が可能・コンフリクトが発生し得る・手動マージ)であることから 「従ってGitでは」の誤記と判断して修正した。
- 元 Wiki のヘッダの無い表には「用語 / 説明」のヘッダを補った。
- PukiWiki のページ内アンカ(
#xxxxxxxx)は GitHub Wiki では再現できないため、 他ページのアンカを指すリンクは「〜(ページ名の該当節を参照)」の形に置き換えた。
Tags: 移行, Git, バージョン管理, リポジトリ, ブランチ, マージ, コミット, プルリクエスト, DVCS
このWikiは「Open棟梁Project」,「OSSコンソーシアム 開発基盤部会」によって運営されています。