Gitバージョン管理の紹介

重要

Gitの詳しい案内は、 Gitのウェブサイト で利用可能です。

Git は、Linuxカーネルの作成とメンテナンスでも知られるリーナス・トーバルズによって作られた分散型バージョン管理システム(VCS)です。バージョン管理は、開発者がコードの変更を追跡するためのシステムです。Gitバージョン管理の利点は次の通りです:

  • 「テスト環境を分離する」ことができます!開発者が新しい機能や修正を加えるときに、本番環境や他の開発作業に影響を与えずにテストできるように、別々の環境 (branch) を設けることを意味します。

  • 履歴を削除せずに特定の コミット に移動する機能があります

  • コミットを組み合わせるなど、さまざまな方法で コミット を管理する能力

  • さまざまなその他の機能は、 こちら をご覧ください!

前提条件

重要

このチュートリアルでは、Windowsオペレーティングシステムを使用します。

以下のリンクからGitをダウンロードして、インストールしてください:

注釈

Gitを path に追加する必要があるかもしれません。

Gitの用語集

Gitは、いくつかの核となるデータ構造とコマンドを中心に回っています:

  • リポジトリ - repository : コードのデータ構造であり、ルートディレクトリに .git フォルダを含みます。

  • コミット - commit : リポジトリの特定の保存された状態で、すべてのファイルと追加が含まれます

  • ブランチ - branch : 一連のコミットをグループ化するものです。各ブランチは独自の履歴を持ちます。これは頻繁的に、「develop」 (継続的な開発のために頻繁に変更される)ブランチと「stable」 機能リリースの印として使われ、ほとんど変更されないブランチを分けるために使われます。

  • プッシュ - push : ローカルの変更をリモートリポジトリに更新します

  • プル - pull : リモートの変更をローカルリポジトリに更新します

  • クローン - clone : リモートリポジトリのローカルコピーをダウンロードするか、修正用に特定のブランチのコピーを作成します

  • フォーク - fork : 変更するために既存のリポジトリを複製するか、元のリポジトリと比較するためのものです

  • マージ - merge : 異なるブランチ/コミット/フォークからのさまざまな変更を単一の履歴に統合します

リポジトリ - Repository

Gitリポジトリは、プロジェクトの構造、履歴、およびファイルを含むデータ構造です。

Gitリポジトリは通常、次のようなもので構成されています:

  • .git フォルダ。このフォルダにはリポジトリに関するさまざまな情報が含まれています。

  • .gitignore ファイル。このファイルには、コミット時に"含めたくない"ファイルやディレクトリが設定されています。

  • ファイルとフォルダ。これはリポジトリの主な内容です。

リポジトリを作成する

リポジトリはローカルに保存することもできますし、リモートに保存することもできます。リモートとはクラウドのことで、リポジトリをホストする別の記憶媒体やサーバーを指すこともあります。 GitHub は人気のある無料のホスティングサービスです。多くの開発者が利用しており、このチュートリアルでもこれを使用します。

注釈

リポジトリをホストできるプロバイダーはいろいろあります。 GitlabBitbucket は、Githubに代わるものです。

GitHubアカウントを作りましょう

GitHubアカウントを作成するために、 ウェブサイト を訪れ、画面の指示に従ってください。

新しいGitHubアカウントを作成する方法。

ローカル作成

アカウントを作成し、確認した後、ホームページにアクセスしてください。表示される画像と似たような見た目になります。

新しく作成されたアカウントのホームページが表示されます。

右上のプラスアイコンをクリックします。

プラスボタンの位置。

次に、 「New Repository」 をクリックします。

プラスボタンをクリックした後に表示される「Create new...」メニューに進みます。

情報を入力し、その後 「Create repository」 をクリックします

「Create repository」ボタンが表示されます。

次のような画面が表示されるはずです。

リポジトリを作成した後のクイックセットアップ画面。

注釈

キーボードショートカット Ctrl+~ を使って、Visual Studio Code for Windows でターミナルを開くことができます。

PowerShellウィンドウを開き、プロジェクト・ディレクトリに移動します。PowerShellを学ぶための優れたチュートリアルは こちら にあります。別のオペレーティングシステムでターミナルを開く方法については、ネットの情報を参照してください。

空のPowerShellウィンドウ。

ディレクトリが空の場合は、git が何かを追跡できるようにするためにファイルを作成する必要があります。下の空のディレクトリの例では、 # Example Repo の内容で README.md というファイルが作成されました。 FRC® ロボットプロジェクトの場合、以下の既存のプロジェクト用コマンドは VS Code WPILib Project Creator によって作成された プロジェクトのルートで実行する必要があります。様々なコマンドの詳細については、以降のセクションを参照してください。

注釈

"C:\Users\ExampleUser9007\Documents\Example Folder" というファイルパスを、リポジトリを作成したい場所のパスに置き換え、リモートURL https://github.com/ExampleUser9007/ExampleRepo.git を、前の手順で作成したリポジトリのURLに置き換えてください。

> cd "C:\Users\ExampleUser9007\Documents\Example Folder"
> git init
Initialized empty Git repository in C:/Users/ExampleUser9007/Documents/Example Folder/.git/
> echo "# ExampleRepo" >> README.md
> git add README.md
> git commit -m "First commit"
[main (root-commit) fafafa] First commit
 1 file changed, 1 insertions(+), 0 deletions(-)
 create mode 100644 README.md
> git remote add origin https://github.com/ExampleUser9007/ExampleRepo.git
> git push -u origin main
> cd "C:\Users\ExampleUser9007\Documents\Example Folder"
> git init
Initialized empty Git repository in C:/Users/ExampleUser9007/Documents/Example Folder/.git/
> git add .
> git commit -m "First commit"
[main (root-commit) fafafa] First commit
 1 file changed, 1 insertions(+), 0 deletions(-)
 create mode 100644 README.md
> git remote add origin https://github.com/ExampleUser9007/ExampleRepo.git
> git push -u origin main

コミット - Commits

リポジトリは主にコミットで構成されています。コミットはコードの保存された状態または バージョン のことです。

前の例では、README.mdというファイルを作成しました。お気に入りのテキストエディタでそのファイルを開き、いくつか 行を編集してください。ファイルを少し変更したら、保存して閉じます。PowerShellに移動し、以下のコマンドを入力します。

> git add README.md
> git commit -m "Adds a description to the repository"
[main bcbcbc] Adds a description to the repository
 1 file changed, 2 insertions(+), 0 deletions(-)
> git push

注釈

良いコミットメッセージを書くことは、メンテナブルなプロジェクトの重要な部分です。コミットメッセージの書き方に関するガイドは、 こちら をご覧ください。

Git Pull

注釈

git fetch は、ユーザーが現在の作業ブランチに、自動的にマージ(統合)したくない場合に使用できます。

このコマンドは、リモートリポジトリから履歴またはコミットを取得します。リモートにあなたが持っていない作業が含まれている場合、自動的にマージを試みます。詳細については、 マージ - Merging を参照してください。

実行: git pull

Git Add

このコマンドは指定されたファイルを"ステージ"(本番環境とほぼ同じ環境にシステムを反映させ、動作や表示などの最終確認を行う段階のこと)をし、それらが次のコミットに含まれるようにします。

単一のファイルの場合は、「git add FILENAME.txt」と実行します。FILENAME.txtは追加するファイルの名前と拡張子です。 gitignore で除外されていないすべてのファイル/フォルダを追加するには、「git add .」を実行します。リポジトリのルートで実行すると、このコマンドは追跡されていない、除外されていないすべてのファイルをステージします。

Git Commit

このコマンドでコミットを作成し、リポジトリの履歴に追加されます。コミットには、最後のコミット以降にステージされたファイルに対して行われた変更(diff)が含まれます。このプロセスは、ソフトウェア開発におけるバージョン管理の基本的な部分です。コミットを行うことで、開発者は特定の時点でのソースコードの状態を記録し、後でその状態に戻ることができるようになります。また、コミットメッセージは重要で、他の開発者がそのコミットの目的や変更内容を理解するのに役立ちます。

実行: git commit -m "ここにメッセージを入力してください"

Git Push

ローカルの変更をリモート(クラウド)にアップロード(プッシュ)します

実行: git push

ブランチ - Branches

Gitのブランチは並行する世界のようです。最初は同じですが、異なる道に分岐する(branch)ことができます。Gitの開発フローはこのようにイメージしてください。

ブランチのワークフロー状態図。

上記の例では、mainはFeature 1というブランチに分岐(または複製)され、誰かがそのブランチをチェックアウトしてローカルコピーを作成しました。その後、ローカルブランチの変更をリモートブランチにコミット(またはアップロード)して、それらをFeature 1ブランチにマージしました。すなわち、1つのブランチから別のブランチに変更が「マージ」されています。このプロセスを通じて、開発者は機能ごとに分離して作業し、後でメイン開発ラインに安全に統合することができます。ブランチングとマージングは、複数の開発者が同時に異なる機能や修正に取り組む際の競合を防ぎ、効率的な協業を促進するために重要です

ブランチを作成する

実行: git branch ブランチ名 。「ブランチ名」は作成するブランチの名前です。新しいブランチの履歴は、現在アクティブなブランチから作成されます。

ブランチに切り替える

ブランチが作成されると、そのブランチに切り替える必要があります。

実行: git checkout ブランチ名 。「ブランチ名」は以前に作成したブランチです。

マージ - Merging

このマージ操作は、開発プロセスにおいて重要な役割を果たします。例えば、フィーチャーブランチでの開発が完了したら、その変更をメインブランチにマージして、新しい機能や修正を本番環境に統合することができます。Gitのマージ操作は、ブランチ間での効率的なコードの統合を可能にし、開発プロセスをスムーズにします。1つのブランチの履歴を別のブランチにコピーしたい場合、それらをマージすることができます。マージは、 git merge ブランチ名 のようなコマンドで行われます。この例では、「ブランチ名」はマージ元のブランチの名前です。マージ元のブランチにある変更は、現在のアクティブなブランチに自動的にマージされます。

リモートリポジトリには、自分が持っていない作業(履歴)が含まれていることがよくあります。 git pull を実行すると、それらのコミットを自動的にローカルにマージしようとします。そのマージは、以下のようになります。

マージワークフローの状態図。

ただし、上記の例では、" File A " がFeature1ブランチとFeature2ブランチの両方で変更された場合はどうなるでしょうか?これは マージ競合 と呼ばれます。マージ競合は、競合しているファイルを編集することで解決することができます。この例では、ファイルAを手動で編集して、希望する変更を維持する必要があります。それが完了したら、単に変更を再追加し、再コミットしてから変更をプッシュします。

リセット

場合によっては、履歴をリセットする必要があるか、コミットを元に戻す(revert)必要があります。これは複数の方法で行うことができます。

コミットを元に戻す、取り消し

注釈

マージを元に戻すことはできません。gitは、どのブランチまたはオリジンを選択すべきかわからないためです。

特定のコミットまでの履歴を戻すには、 git revert commit-id を実行します。コミットIDは "git log" コマンドを使用して表示できます。

HEADのリセット

警告

これは警告です!HEADを強制的にリセットするのは危険なコマンドです。指定したコミット以降のすべての履歴を永久に消去してしまいます。改めて警告です!

実行: git reset --hard commit-id

フォーク - Forks

フォークはブランチと同様に扱うことができます。アップストリーム(元のリポジトリ)をオリジン(フォークされたリポジトリ)にマージすることができます。

既存のリポジトリをクローンする

リモートに既に作成されているリポジトリがある場合、次のコマンドを使用してクローンすることができます。

git clone https://github.com/myrepo.git

myrepo.git はあなたの git リポジトリに置き換えます。これに従うと、 「コミット」 にスキップできます。

フォークを更新する

  1. アップストリームを追加する: git remote add upstream https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY.git

  2. 追加されたことを確認する: git remote -v

  3. アップストリームからの変更を取得する: git fetch upstream

  4. HEADに変更をマージする: git merge upstream/アップストリームのブランチ名

Gitignore

重要

チームがロボットプロジェクトに含まれる .gitignore ファイルを変更しないことは非常に重要です。これによってオフラインのデプロイが機能しなくなることがあります!

.gitignore ファイルは、一般的に git add で自動的にコミットしないファイルを指定するために使用します。このファイルにリストされているファイルやディレクトリは コミットされません「git status」 を実行しても、指定されたファイルは表示されません。

追加情報は こちら をご覧ください。

フォルダを隠す

新しい行を追加して、末尾にスラッシュを含む非表示にするフォルダを追加します。

例: 非表示にするディレクトリ/

ファイルを隠す方法

非表示にするファイル名を、リポジトリのルートからの相対的なディレクトリを含めて、新しい行に追加します。

例: directory/隠したいファイツの名前.txt

例: 隠したいファイルの名前2.txt

追加情報

公式の git ウェブサイトには、より詳細なチュートリアルがあります。

よくある間違いを修正するためのガイドは git flight rules リポジトリにあります。