🦔

Gitの理解ちゃんとやる

2024/07/21に公開

記事を書こうと思った経緯

開発の人ではないですが、AWSのIaC取り組むにあたってちゃんとgitやろうと思って

Gitとは?

開発やプロジェクト管理で使われる分散型バージョン管理システム
主な特徴
1,バージョン管理→ファイルやプロジェクトの変更履歴を追跡し、管理する。これにより、過去の特定の時点に戻ったり、変更内容を確認できる
2,分散型システム→各ユーザーのコンピュータに完全なリポジトリのコピーが作成される。これによりオフライン作業が可能
3,共同作業の効率化→複数の開発者で管理する際に、変更の競合を管理できる。
4,ブランチとマージ→プロジェクトの時系列を分岐(ブランチ)して派生プロジェクトを作成したり、それを再び元の系列に統合(マージ)できる。
5,高速な操作→ローカルリポジトリの作業が中心になるため、多くの操作が高速で行える

主な用語

ワークツリー→実際に作業している場所
インデックス(ステージングエリア) →ワークツリーとリポジトリの間にある一時保存場所。リポジトリへ記録する必要があるものと不必要なものを分別できる。Gitの公式ページでは、

普通はGitディレクトリに含まれる、次のコミットに何が含まれるかに関しての情報を蓄えた一つのファイル

と記載されている
コミット →変更内容をインデックスからリポジトリに追加すること
ブランチ →リポジトリ内で分岐した独立した作業用の環境
プッシュ →ローカルでの変更をリポジトリに送信すること
プル →リモートリポジトリから最新の変更をローカルに取得すること
フェッチ →リモートリポジトリからの最新の変更を取得すること
プルとフェッチの詳しい違いについてはこの神記事参照
マージ →ブランチでの作業内容を統合すること
リセット →直前のコミットまでの変更を取り消すこと
チェックアウト →ブランチや特定のコミット(履歴の中の特定の時点)に切り替えること
ステージ →ワークツリーからコミットしたいファイルをインデックスに登録すること
コンフリクト →複数の開発者がファイルの同じ部分を変更しようとしたときに起きる矛盾のこと
リモート追跡ブランチ→ リモートリポジトリの特定のブランチの最新の情報を追跡するために使用される、ローカルにある専用のブランチ。git fetchコマンドで更新され、通常origin/masterのような形式で表せられる。追跡専用のため、直接チェックアウトして変更することはできない。git mergeコマンドでローカルブランチに反映でき、ワークツリーが変更される。
詳しくは神記事参照

主なコマンド

git init →特定のディレクトリをローカルリポジトリにして初期化
git clone <URL> →リモートリポジトリをローカルにコピー
git add <file> →変更をインデックスに追加
git commit -m "メッセージ" →インデックスの変更をコミット
git commit -a -m 'メッセージ' →修正分を一気にコミット(git addいらず)ただ、-aはステージングエリアのみを比較するため、新規作成ファイルは-aの対象外となる
git fetch,git pull神記事参照
git merge →指定されたブランチを現在のブランチにマージする
git push →ローカルリポジトリの変更をリモートリポジトリに送信する。
git status →作業ディレクトリの状態を示すポイント
git log →コミット履歴を表示
git diff →変更の差分を表示
**git brance <ブランチ名>**→ ブランチを作成、表示する
**git checkout <ブランチ名>**→ ブランチを切り替える
git reset→ ステージングエリアのふ
git stash→ 作業ディレクトリの変更を一時的に保存する。
git diff(--word-diff) → 作業ディレクトリとステージングエリアの差分を行表示。--word-diffオプションを付けると単語で差分
git rm (--cached) <file> →作業ディレクトリとステージングエリアでファイル取り消し(--cachedを付けると作業ディレクトリには影響なし)

.gitignoreファイル

コミットなどの、gitの管理に含めたくないファイルやディレクトリを、globパターンという簡易的な正規表現で記述する。
gitgnore.ioという1つの.gitgnoreファイルを生成してくれるサービスもある。
また、%USERPROFILE%/に.gitgnore_globalというPC全てで無視したいファイルを設定できる。

GitHubとは

Gitを利用したソースコード管理、バージョン管理のためのWebプラットフォーム。
多くのオープンソースがホスティングされていて、広範なコミュニティがある。
主な機能
リポジトリ管理→ソースコードのバージョン管理
プルリクエスト→コードのレビューとマージ
イシュー管理→バグや機能追加のトラッキング
アクション→CI/CDパイプラインの自動化

GitLabとは

Gitを利用したバージョン管理システムで、DevSecOpsプラットフォームとしても機能する。
オンプレミス環境のものとクラウド版がある。
主な機能
リポジトリ管理→ソースコードのバージョン管理。
CI/CD→継続的インテグレーション/継続的デリバリーの自動化。
プロジェクト管理→課題管理やマイルストーンの設定。
セキュリティ機能→DevSecOpsを実現するためのセキュリティツール。

GitHubとGitLabの違い

利用目的と機能の観点→GitHubは、主にオープンソースプロジェクトのホスティングと開発者同士のコミュニケーションに強みがあります。一方、GitLabは、DevSecOpsプラットフォームとしての機能が充実しており、CI/CDやセキュリティ機能が統合されています
ライセンスと提供形態の観点→GitHubは商用ライセンスで提供され、主にクラウドベースのサービスです。
GitLabはオープンソースライセンスで提供されており、クラウドベースの「GitLab.com」と、自社サーバにインストールする「Self-Managed版」の両方が利用可能です
コミュニティとサポートの観点→GitHubは広範なコミュニティと豊富なリソースがあり、オープンソースプロジェクトのホスティングに適しています。
GitLabは、企業内での利用に適した高度なプロジェクト管理機能とセキュリティ機能を提供しています。

Discussion