勉強シリーズこのページについて共同開発で決められる「ルール」には、世の中のプロジェクトで広く一般的なものや、プロジェクトごとに特殊なものがあります。前者は暗黙の了解や不文律になっていることが多く、検索もしにくいことが多いです。共同での開発経験の少ない人にとっては不文律があると辛いので、このページではそれらを明示的に書き下します。基本的にここに書いてある流れで開発を進めます。他の文化からやってきたものについてはこの限りではありません。基本的な概念このページ全体に共通している概念について説明します。困ったら人に聞こうこのページは概説的なので、多種多様なケースに網羅的に対応することはできません。開発についてよく知っている人に聞くのが結局のところ最速です。理解に苦しんだらすぐ会話してください。合意があればなんでもいい開発フローの作り方はケースバイケースです。誤っているというものはなく、合意があればどんなルールでも有り得ます。ついてはこのページの内容だけで全容を把握するのは無理です。末尾のリンク集にあるサル先生のGit入門を読めばわかりやすく学べます。手を動かしてリポジトリをぶち壊して...を繰り返す過程でこのページを読むと次第に意味がわかるでしょう。このページの内容が身についていると共同開発がしやすいことは間違いないので、たまに読み返してみてください。開発にはいろいろなツールを使います。本章では、共同開発で使う道具に焦点を当てて説明します。Gitソースコードの差分と歴史を管理する「バージョン管理システム」の1つです。手元の歴史(ローカルリポジトリ)とインターネット上の歴史(リモートリポジトリ)が区別され、開発者間で必ずしも同じ歴史を見ていない可能性があるという特徴を持つシステムです。リモートリポジトリに操作を伝えたり、ローカルリポジトリを育てたりするツールです。いうコマンド名で起動できる公式クライアントは、黒い画面でコマンドによりリポジトリを操作します。ようなグラフィカルなクライアントもあります。理解できない可能性があるため、おすすめしません。リポジトリの置く場所を提供するサービスです。よる開発プラットフォームです。独自のフロー)や、Issue(問題のトピックを提出し議論する機能)、Wiki(情報をコードではなく自然言語で書き溜めておく場所)などの機能があります。(formatter)コードの見た目を統一するツールです。スタイルを統一することで、コードの見た目の個人差が減り、保守しやすくなります。フォーマッターはコードのシンタックス(文法)を統一するだけで、セマンティクス(意味)については考えません。コードの意味まで見て悪い箇所を指摘してくれるツールには、後述のリンターが対応します。);}}以上の2つのコードスニペットを見てください。各々のコードの持つ意味(セマンティクス)は完全に等価ですが、文法(シンタックス)が違います。スペースや中括弧の置き場所など、こういったシンタックスの差をなくしてスタイルを統一するのがフォーマッターの役目です。いうフォーマッターを使うかやどういうスタイルにするかは言語や界隈によって主流が存在し、通常はそれをそのまま採用します。(linter)コードの持つ意味や構造をチェックし、バグに繋がりやすい典型的な間違いや品質の悪い記述を指摘します。フォーマッターはシンタックス(文法)をチェックし、リンターはセマンティクス(意味や構造)をチェックするという違いがあります。道具と同じように用語も星の数ほどあります。コード提出の流れを解説する前に用語を並べておきます。今すべてを理解する必要はありません。(repository)ソースコードの置き場所です。通常のフォルダ(ディレクトリ)に置く事との違いは、リポジトリが「ファイルの変更の歴史を保持していること」にあります。克明に記録されています。-)があり、開発者はまず手元のローカルリポジトリを育てた上でリモートリポジトリへとプッシュします。(commit)リポジトリにおける変更の単位です。(diff)がメタデータとして紐付きます。入ることがありますが、これらは全部コミットメッセージで表現されます。-)という特殊なコミットが生成されます。通常のコミットでは親は1つですが、マージの場合親は2つ以上あります。(branch)コミットの連なりです。1つのブランチにつき1本の歴史を記録しています。別なブランチからコミットを取り込むことがありますが、これらの操作単位もやはり歴史の中の1コミットでしかありません。歴史をたどっていくと、他のブランチと共通の祖先に必ずたどり着きます。デフォルトブランチは、リポジトリの中で1つだけある特別なブランチです。ブランチを指定せずにプルすると、ローカルリポジトリ内のツリーはこのデフォルトブランチの最新状態になります。標準でこのブランチになります。そのリポジトリの内容をどこかへデプロイする(ビルドして実際に稼働させる)ときは大抵デフォルトブランチの内容が使われます。デフォルトブランチには安定した実装があることが普通望まれます。コミットの連なり」という表現はあまり正しくありません。ブランチとはただ1つのコミットを指し示す名前だからです。枝と呼ぶのかというと、そのコミットには親コミットがあり、さらにその親コミットがあり、...とたどることでどのコミットからでも必ずひとつの共通祖先に辿れるから、というのが理由です。(pull)プッシュはローカルリポジトリからリモートリポジトリへと変更を反映する操作、プルはリモートリポジトリからローカルリポジトリへ変更を取り込む操作です。