{}const=>[]async()letfn</>var
開発

Gitの誕生:Linuxが世界を分散バージョン管理(DVCS)に導いた方法

2005年にBitKeeperが廃止されたことで、Linuxコミュニティが高速で信頼性の高いDVCSであるGitを作成することになったという話。スナップショットのアイデア、DAGの歴史、安価なブランチ、そしてそれがチーム開発をどのように変えたかを分析します。最後に、ミニプロジェクトと実用的なアドバイスがあります。

К

Kodik

著者

1分で読める

2005年春、LinuxカーネルコミュニティはBitKeeperを失いました。そしてわずか数週間で、世界中のプログラマーの習慣を変えるものが登場しました。Gitがなぜ勝ったのか、Gitの内部構造はどのようなものなのか、そして初心者がGitから何を得ることができるのかを見ていきましょう。

TL; DR:Gitはスナップショット、グラフ(DAG)、および安価なブランチです。その結果、オフラインでの作業のスピード、信頼性、自由が得られます。

Git へ:中央集中型バージョン管理とその制限 🧯

  • CVS/SVN 中央サーバーに依存していました。ネットワークがなければ、コミットはありません。

  • ブランチは「高価」で、マージは痛みを伴いました。チームはしばしば実験を引き延ばしました。

  • 「プロジェクトの状態のスナップショット」ではなく、「すべてのファイルに差分」という考え方は、ストーリーを複雑にしました。

毎月数千のパッチが適用されるLinuxカーネルでは、これはボトルネックになりました。

🔥 10万人以上の学生が参加中

理論を読むのに疲れた?
コーディングの時間だ!

Kodik — 実践でプログラミングを学ぶアプリ。AIメンター、インタラクティブなレッスン、実際のプロジェクト。

🤖 AI 24時間
🎓 修了証
💰 無料
🚀 始める
今日参加

Gitが登場した理由と、どのようなものであるべきか ⚙️

  • 📦 分散性:誰もが履歴の完全なコピーを持っている。コミットとブランチはオフライン。

  • 速度:膨大な履歴に対するインスタントローカル操作。

  • 🧪 信頼性:ハッシュを介した履歴の暗号化された完全性。

  • 🌿 安い枝:作成、切り替え、マージはイベントではなくルーチンです。

すべてを変えたGitの重要なアイデア 💡

  1. 差分ではなくスナップショット:コミットは、パッチのセットではなく、プロジェクトの状態のスナップショットです。

  2. メルクルの木:オブジェクト(blob, tree, commit, tag)はハッシュで関連付けられています—履歴は完全です。

  3. ブランチ — ポインタ:これはコミットへのリンクにすぎません。操作は瞬時に行われます。

  4. DAGの歴史:合併は通常の安価な操作であり、「ヒーロイズム」ではありません。

  5. ローカル作業:コミット、ログ、比較—ネットワークなし。同期— push/pull

# メンタルイメージ
(main)─A─B─C
          ╲
(feature)  D─E   ← ветка — это указатель; merge/rebase двигают ссылки

ボンネットの下:Gitオブジェクトモデル🧬

オブジェクト

保存内容

なぜ

blob

ファイルの内容

コンテンツのターゲティングと重複排除

tree

ファイルとフォルダへのリンク

コミット時のディレクトリ構造

commit

tree、親、作成者、時間、メッセージへのリンク

写真+歴史上の場所

tag

署名付きオブジェクトリンク

リリースと「マイルストーン」

歴史的にSHA-1。最新のアセンブリはSHA-256をサポートしています。いずれにせよ、ハッシュは履歴を「まとめる」ものです。

30分間のミニワークショップ🛠️

  1. リポジトリを作成します。git init、2つのファイルを追加し、2〜3つの小さなコミットを作成します。

  2. ブランチ: git switch -c feature、ファイルを変更し、コミットします。

  3. maingit switch main && git merge featureを注ぎます。

  4. 履歴をご覧ください:git log --graph --oneline --decorate

  5. 探偵ごっこをしましょう:git bisectは人工バグです。

  6. ローカルで履歴を編集します: git rebase -i HEAD~3 (スクワッシュ/名前変更)。同意なしにプッシュしないでください!

# コマンドのヒント
git init
git add .
git commit -m "init"
git switch -c feature
# ...編集...
git commit -m "feature: add X"
git switch main
git merge feature
git log --graph --oneline --decorate

初心者がよくするミスと、素早い解決策 🧭

  • 🔗 Detached HEAD — 実験の前に常にブランチを作成してください:git switch -c exp

  • ♻️ Rebase vs merge - rebaseは履歴を上書きします。一般的に、repoではmergeを使用することが多いです。

  • 📦 大きなファイル — Git LFSまたは外部ストアを介してアーティファクトを保存します。

  • ↩️ キックバックreset --hard ではなく、git revert (新しいコミット) の方が安全です。

B コディケ 私たちはプログラミングの学習を楽しくわかりやすくします。ステップバイステップでスキルを磨くのに役立つ課題を伴う興味深いコースを用意しています。

また、アクティブな テレグラムチャンネル、ここでは素晴らしいアイデアについて話し合い、経験を共有し、課題を一緒に分析します。学習は有益であるだけでなく、楽しいものになります。

まとめ:Gitの歴史から学ぶこと🧰

  • Gitは、Linuxカーネルの大規模な開発という苦労から生まれたものなので、ブランチとマージが得意です。

  • スナップショットとDAGは「魔法の」ベールを取り除きます。差分パッチではなく、ストーリーで考え始めましょう。

  • 短いブランチと頻繁なコミットを行う。Gitはこのプロセスで展開されます。

Git での最初の「トラブル」は、detached HEAD、rebase コンフリクト、または「失われた」コミットのどれですか?

🎯先延ばしをやめよう

記事は気に入った?
実践の時間だ!

Kodikでは読むだけでなく、すぐにコードを書く。理論 + 実践 = 本当のスキル。

即座に実践
🧠AIがコードを説明
🏆修了証

登録不要 • カード不要