Gitとは?
Gitは、プロジェクトの完全な履歴を記録する分散型バージョン管理システムで、多くの人が互いを上書きすることなく同じcodebaseを変更できるようにします。
Gitは、ほぼすべての現代のソフトウェアプロジェクトを支えるツールです。ファイルへのあらゆる変更を追跡し、誰がなぜそれを行ったかを記憶し、作業の主流を乱すことなくアイデアを試すためにbranchできるようにします。分散型であるため、すべてのcloneが履歴の完全なコピーであり、それがGitをCI/CDにとって自然なsource of truthにしている理由でもあります。
Gitが実際に行うこと
Gitの中核は、commitするたびにプロジェクトのスナップショットを取ることです。diffを保存するのではなく、ツリー全体の状態を保存し、変更されていないファイルを再利用するため、履歴を素早くたどれます。すべてのスナップショットはコンテンツハッシュで識別されます。つまり履歴は改ざん検出可能です。過去のどこかを変えれば、それ以降のすべてのハッシュも変わるのです。
設計上分散されている
古い集中型システムとは異なり、Gitはすべての開発者にすべての履歴を含むリポジトリの完全なコピーを与えます。commit、branch、logの確認をすべてオフラインで行い、準備ができたらGitHubのような共有remoteを通じて他の人と同期できます。履歴そのものには単一障害点がありません。
コマンドを最初に見る
典型的な1日で触れるのはわずか数個のコマンドだけです。変更をstageし、メッセージを添えてcommitし、remoteにpushして、チームメイトとCIが見られるようにします。
git add .
git commit -m "Add login form validation"
git push origin mainGitがどのようにCI/CDを支えるか
CI/CDシステムはGitリポジトリを監視し、変更に反応します。pushやpull requestはイベントです。CIサーバーは正確なcommitをチェックアウトし、それをbuildし、testを実行します。すべてのcommitが一意の識別子を持つため、pipelineの実行をそれがtestしたコードに正確に結びつけられます。これは再現可能なbuildと信頼性の高いdeploymentに不可欠です。
なぜチームはGitに頼るのか
- 完全な履歴により、バグがいつなぜ現れたかを簡単に見つけられます。
- branchingにより、競合なく並行して作業を進められます。
- コンテンツハッシュは、すべてのbuildの信頼でき再現可能な記録を提供します。
- remoteは、CIがbuildできる共有のsource of truthを提供します。
重要なポイント
- Gitは、プロジェクトの履歴をスナップショットとして記録する分散型バージョン管理システムです。
- すべてのcommitは一意のコンテンツハッシュを持ち、履歴を再現可能で改ざん検出可能なものにします。
- CI/CD pipelineはGitからbuildし、pushやpull requestに反応します。