「[[.NET 開発基盤部会 Wiki>http://dotnetdevelopmentinfrastructure.osscons.jp]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。 -[[戻る>Git]] --Gitの基本 --[[Gitコマンド]] --[[インストール>Git#f825d4d1]] *目次 [#x8384c78] #contents *概要 [#m3065cef] 技術解説の意味が解らんかったので、やっぱ基本は大事。 **用語集 [#x188d216] ***基本概念 [#mc1ede4f] |リポジトリ(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 --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~ ワーキングディレクトリを持たない。更新情報だけを持っている。 ***ブランチとコミット関連 [#bcb51a2a] |ブランチ(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:ファイルの変更内容を一時的に記録しておく領域。 ***リモートリポジトリ関連 [#v8ec0fa3] |リモート(Remote)|ネットワーク上にあるリポジトリ。GitHubやGitLabなどを指す。| |フェッチ(Fetch)|リモートリポジトリの最新の変更を取得するが、ローカルのブランチには適用しない操作。| |プル(Pull)|fetch + merge を行い、リモートの変更をローカルに適用する操作。| |プッシュ(Push)|ローカルリポジトリの変更をリモートリポジトリへ送信する操作。| |クローン(Clone)|リモートリポジトリをローカルに複製する操作。| ***履歴管理とトラブルシューティング [#q22d6185] |ログ(Log)|git log で過去のコミット履歴を表示するコマンド。| |リセット(Reset)|コミットの状態を過去の状態に戻す操作。--soft, --mixed, --hard などのオプションがある。| |リバート(Revert)|既存のコミットを打ち消す新しいコミットを作成する操作。履歴を残しつつ修正できる。| |ステータス(Status)|git status で作業ツリーの状態を確認するコマンド。| |ディフ(Diff)|git diff で変更点を比較するコマンド。| |スタッシュ(Stash)|作業中の変更を一時的に退避する機能。git stash で退避し、git stash pop で戻す。| **基本操作 [#n75d0f80] ***ほとんど全ての操作がローカル [#vdc76de5] -分散バージョン管理システム (DVCS) として設計されているので、 --ローカルだけで作業できる(ローカルの作成にリモートが必要だが)。 --後に要所・要所でローカルで作業してリモートと同期する。 -従って、オフラインでの作業が可能。 ***チェックサムde完全性 [#h4483af8] Gitでは、すべてのオブジェクト(ファイル、ディレクトリ、コミットなど)にハッシュが関連付けられ、これを元にデータが管理される。 ***コミットはスナップショット [#o83a3a0d] Gitのコミットはスナップショットで、差分ではない? -他のVCS (CVS、Subversionとその類を含む)は差分 --各コミットでは、ファイルの変更点 (diff) のみ記録する方式 --履歴を取得する際には前のバージョンから順番に差分を適用して復元する必要がある。 -Gitはファイルのスナップショット --各コミットで全体のスナップショットを保存(変更ファイルの完全なコピー) --差分自体ではないが、内部的には効率的に差分を管理する仕組みとなっている。 --また、変更のないファイルについては前回のバージョンへの参照を持つ。 --過去のバージョンの取得やブランチの切り替えが高速になる利点がある。 これにより、過去のバージョンの取得やブランチの切り替えが高速になる。 ***ブランチの統合はマージ&コミット [#h73ca59d] -ブランチの統合はファイル間の差異をそれぞれマージしてコミットする。 -マージでは、コンフリクトが無ければ自動的に行われる。マージ後、確認してコミット。 -この際、2つの分岐をマージした結果のコミットを特別にマージコミットと呼ぶ。 -なお、ブランチしたが実際には分岐していない場合はマージコミットされない(Fast-Forward Merge)。 -従ってGitHub --分散開発が可能な仕組みとなっている。 --デメリットとしてコンフリクトが発生し得る。 --コンフリクトは手動でマージして解決する必要がある。 ***プル、プッシュ、プルリクエスト [#eaa84960] -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) ***変更履歴の有向非巡回グラフ [#y3400fa6] -Gitのグラフとは、変更履歴を表す有向非巡回グラフ -グラフは、各コミットがノードとなり、親コミットへの参照(エッジ)を持つ。 -変更履歴には単純な「コミット」や「分岐(ブランチ)」を「統合(マージ)」した「マージコミット」が含まれる。 *仕組み [#iedd287e] **三つの状態 [#j9a79c9d] -修正済、ステージ済、コミット済 -スナップショットはコミット時にのみ作成される。 ***修正済 [#pdc7d5e9] ファイルに変更を加えたが、databaseにそれがまだコミットされていない状態 ***ステージ済 [#gdc88fb7] 次のスナップショットのコミットに加えるために、~ 現在のバージョンの修正されたファイルに印をつけている状態。 ***コミット済 [#ic8b49df] local databaseにデータが安全に格納されている状態 **ファイルの状態 [#i079ab3a] git status でファイルの状態を確認できる。 ***gitに認識されているか、いないか? [#m9c41e5b] -追跡されている (tracked) -追跡されてない (untraced) ***追跡されているファイルの3つの状態 [#udfdaa31] -変更されていない (unmodified) -変更されている (modified) -ステージされている (staged) **Gitプロジェクト(ディレクトリ内) [#occ5963b] ***Gitディレクトリ [#tbfe0b23] プロジェクトのためのメタデータとオブジェクトのdatabaseがあるところ。 ***作業ディレクトリ [#k8251daa] プロジェクトの一つのバージョンの単一checkout ***ステージング・エリア [#dc4745ec] -インデックス or ステージング・エリア と呼ばれる。 -次のコミットに何が含まれるかに関しての情報を蓄えた一つのファイル。 -git addでファイルをステージング・エリアに追加できる。 *参考 [#kad973f9] -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 **@IT [#da47ce70] -こっそり始める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-scm.com [#u0c6b731] -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 **リファレンス [#k49606b2] -Git - Documentation~ https://git-scm.com/doc -transitive.info - Home~ http://transitive.info/ **[[Gitコマンド]] [#wd19dfed] -[[rebase]]