Gitとは何か?


ほぼ確実に、あなたは手動でバージョン管理をしたことがあるはずです。report.docx、report_final.docx、report_final_v2.docx、report_final_ACTUAL.docxというファイルが入ったフォルダは、バージョン管理です。ただし、考えられる最悪の種類のバージョン管理です。2つのファイル間で何が変わったかを判断することはできませんし、2人が同時に加えた編集をマージすることもできません。さらに、3つ前のコピーで削除した良い段落を取り戻すこともできません。
Gitはその問題を適切に解決します。これはあなたのプロジェクトのスナップショットを時系列で記録するツールで、複数のコピーの山の代わりに、プロジェクト全体の履歴が1つの場所にあります。このツール自体はあなた自身のコンピュータ上に存在する小さなプログラムです。gitで始まるコマンドをターミナルに入力すると、テキストで応答します。
Gitがあなたのためにすること
本質的に、Gitはあなたのプロジェクトのタイムラインを保持します。保存する価値がある時点に達するたびに、**コミット**を記録します。これはすべてのファイルのスナップショットと、何が変わり、なぜ変わったかを説明する短いメッセージです。後でそのタイムラインを見返すことで、プロジェクトがどのようにして現在の状態に至ったかを正確に確認できます。これは実際のタイムラインで、git logで出力されます。これはプロジェクトのコミットを一覧表示するコマンドです(--onelineフラグはそれぞれを1行に短縮します):
$ git log --oneline
a1b2c3d パスワード強度メーターを追加
9f8e7d6 サインアップフォームの検証を修正
5c4b3a2 プロジェクト構造をセットアップこれはプロジェクトの履歴における3つの保存されたポイントで、最新が上にあり、それぞれに短いIDと作成者が書いたメッセージがあります。(このような例では、$で始まる行はターミナルに入力されたコマンドで、$自体は含まれません。その下の行はGitの応答です。)次の数章で、この履歴を生成および読み取るすべてのコマンドを学びます。今のところ、Gitが常に戻ることができるスナップショットシリーズとしてあなたの仕事を記録しているという考えを忘れずに。
プロジェクトがこのような履歴を持つと、多くのことが可能になります。何が変わり、誰が変えたかを見ることができます。危険な考えを脇に試してみて、うまくいかなかった場合はきれいに捨てることができます。プロジェクト全体とその完全な履歴を他の人に渡すことができます。2人が同じコードを編集するとき、Gitは彼らの仕事を組み合わせ、彼らが意見の相違がある場所にフラグを立てるので、人間がそれを解決できます。これらの4つの能力(履歴、安全な実験、共有、作業の組み合わせ)が、ほぼすべての専門的なコードベースの下でGitが実行されている理由全体です。
final_v2_ACTUALコピーの山はGitが終わらせるために構築された問題で、最初に1つを削除するときどれだけ素晴らしいかを約束します。 GitとGitHubは異なるもの
これは最初のころにほぼ誰もがつまずくので、ここに簡潔に述べます。Gitはバージョン管理ツールです。あなた自身のコンピュータ上で実行され、コミットを記録し、インターネット接続やアカウントは必要ありません。**GitHub**はGitリポジトリをオンラインで保存し、その周りに物を追加するウェブサイトです。コードを共有し、互いの変更をレビューし、問題を報告し、協力するための場所です。
違いを最も明確に感じる方法は、GitHubアカウントを作成せずに毎日Gitを使用し、ラップトップでコミットとブランチを作成することです。GitHubが登場するのは、リポジトリを他の人や他のマシンが到達できる共有場所に配置したいときだけです。Gitはエンジン。GitHubはそれが生産するものをホストする1つの場所です。他にも存在します。GitLabやBitbucketのような他のものも、その下で同じGitリポジトリをホストしています。
Gitの出来方
Gitの歴史は、それがなぜそのように機能するかを説明する多くを説明しています。これは2005年にLinux Torvaldsによって書かれました。Linuxを始めたのと同じ人です。Linuxカーネルは世界中に散らばった数千のボランティアによって構築されており、数年間、BitKeeperと呼ばれる商用ツールを使用してすべての作業を調整していました。その背後にある会社は、オープンソースプロジェクトが無料で使用できます。
2005年、その無料の取り決めは崩れ、カーネルコミュニティは突然、その大規模で急速に変化するコードベースを管理するツールがありませんでした。当時利用可能な他に何もカーネルのサイズに対応できませんでした。そこでTorvaldsはカーネル作業から2、3週間戻り、正確にその問題によって形作られたいくつかの堅固な目標で独自のバージョン管理ツールを書きました。
彼は**分散させたかったので、すべての貢献者が自分のマシンでプロジェクト履歴全体を持ち、中央サーバーをチェックインせずに作業できます。彼はそれを高速にしたかった。カーネルのサイズのプロジェクトを処理するのに十分な速さで、人々を待つことはなかった。また、彼は整合性**を保証したかったため、誰も静かに履歴を変更することはできず、ディスクエラーがプロジェクトを破損して気付かなくなることができません。
これらの目標が今日のGitがなぜそのように振る舞うかです。プロジェクトをcloneすると、その完全な履歴を使用して作業を得ます。これは分散目標の実際のアクションです。wi-fiなしで飛行機でコミット、ブランチ、およびブラウズ履歴を作成できます。すべてのコミットは、その正確なコンテンツから計算されたフィンガープリントでスタンプされるため、1バイトが変わると、フィンガープリントはマッチングを停止し、Gitはそれに気付きます。Torvaldsが2005年の急ぎで行った設計上の決定は、あなたが今Gitを使用するたびに依存している決定です。
cloneがオフラインで作業する完全な履歴を提供し、なぜすべてのコミットがフィンガープリントを取得する理由です。何年も使用するツールのための便利なコンテキスト。 このハンドブックは次に進みます
メンタルモデルを整備すると、トラックの残りは仕事についてです。あなたの最初のリポジトリはゼロから始まります。ターミナルを開き、マシンがGitを持たない場合はGitをインストールし、フォルダをコミットできるリポジトリに変えます。そこから、変更を保存する毎日のループ、その後ブランチ、マージ、およびGitHubの協力フローを学びます。用語があなたを失うことがあれば、用語集にはこれらのドキュメント内のGit語彙のすべての部分の短い定義があります。

