Git を Ubuntu にインストールしてリモートリポジトリにプッシュする

# Git を Ubuntu にインストールしてリモートリポジトリにプッシュする

こんにちは、@studio_meowtoon です。今回は、WSL の Ubuntu 24.04 LTS に Git をインストールする手順と、既存のプロジェクトをクローンし、リモートリポジトリにプッシュする方法を紹介します。
![git_on_ubuntu.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3206449/769c0e55-ea87-33a3-d9dd-e8348200d04b.png)

## 目的

Windows 11 の Linux でクラウド開発します。

こちらから記事の一覧がご覧いただけます。

https://qiita.com/studio_meowtoon/items/6119ab05d8b13527efd8

## 実現すること

+ Windows 11 の WSL Ubuntu 24.04 に Git をインストールします。
+ 既存のプロジェクトをクローンし、変更をリモートリポジトリにプッシュします。

## 技術トピック

### Git とは？  

<details>
<summary>こちらを展開してご覧いただけます。</summary>

### [Git (ギット)](https://git-scm.com/book/ja/v2)

:::note info
Git は、分散型バージョン管理システムの一つであり、ソフトウェアの開発やテキストファイルなどの変更履歴を記録・管理するためのツールです。Git は、ファイルの変更履歴をリポジトリと呼ばれる場所に保存し、それらの変更履歴を追跡、比較、統合することができます。また、Git は複数の人が同時にファイルを編集する際のバージョンの競合を管理し、修正することができます。Git はオープンソースであり、世界中の多くのプロジェクトで広く使用されています。
:::

</details>

## 開発環境

+ Windows 11 Home 23H2 を使用しています。

:::note info
[WSL](https://learn.microsoft.com/ja-jp/windows/wsl/about) の Ubuntu を操作していきますので macOS の方も参考にして頂けます。  
:::  

<details>

WSL (Microsoft Store アプリ版) [※ こちらの関連記事からインストール方法をご確認いただけます](https://qiita.com/studio_meowtoon/items/cd0c4a607d451dbf5430)

```sh
> wsl --version
WSL バージョン: 2.2.4.0
カーネル バージョン: 5.15.153.1-2
WSLg バージョン: 1.0.61
```

Ubuntu [※ こちらの関連記事からインストール方法をご確認いただけます](https://qiita.com/studio_meowtoon/items/cd0c4a607d451dbf5430)

```sh
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 24.04 LTS
Release:        24.04
Codename:       noble
```

</details>

:::note warn
この記事では基本的に Ubuntu のターミナルで操作を行います。
:::

## Git のインストールと設定

Git をインストールします。

```sh
$ sudo apt update
$ sudo apt install git
```

バージョンを確認します。

```sh
$ git --version
git version 2.43.0
```

Git にアカウントを設定します。

```sh
$ git config --global user.name "YOUR NAME"
$ git config --global user.email awesome@company.com
```

:::note warn
上記の設定は、Git のコミット情報にも含まれます。名前を漢字で設定した場合、コミット情報にも漢字で登録されます。ご参加されているプロジェクトの規約や方針をご確認の上、設定を行ってください。
:::

Git のオプションを設定します。

```sh
$ git config  --global core.autocrlf false
$ git config  --global core.quotepath false
```

:::note info
**core.autocrlf** は、Git が自動的に改行コードを変換するかどうかを設定するものです。 Linux では改行コードが LF のみであるため、この設定を false にすることで、Git が改行コードを変換しないようにすることができます。  

**core.quotepath** は、ファイル名をクオートする必要がある場合に、Git がそれを行うかどうかを設定するものです。この設定を false にすることで、Git がファイル名をクオートしないようにすることができます。
:::

アカウントの確認

```sh
$ git config user.name
$ git config user.email
```

それぞれ以下のように確認することができます。

```
YOUR NAME
awesome@company.com
```

これで Ubuntu に Git をインストールして設定することができました。

## プロジェクトをクローンしてみる

Git を初めて使用する場合、既に存在するプロジェクトをクローンして Git の操作を始めるケースは一般的です。今回は、そのような状況で Git の操作を試みます。

:::note info
GitHub を利用する場合や社内の GitLab を利用する場合、通常、プロジェクトは **https://awesome.gitlab.url.com/username/qiita-contents.git** といった URL で公開されます。
:::

プロジェクトをクローンする

```sh
$ cd ~
$ git clone https://awesome.gitlab.url.com/username/qiita-contents.git
```

ディレクトリを確認する

```sh
$ ls -la
drwxr-xr-x 3 username username 4096  3月  3 15:33 qiita-contents
```

**qiita-contents** というフォルダが作成されています。

プロジェクトに移動して、内容を確認します。

```sh
$ cd qiita-contents
$ ls -la
※ 省略
drwxr-xr-x 8 username username 4096  3月  3 15:37 .git
-rw-r--r-- 1 username username   89  3月  3 15:24 README.md
※ 省略
```
:::note info
プロジェクトフォルダの内に **.git** フォルダがあります。このフォルダには Git がこのフォルダを管理する情報が含まれています。そして、Git が管理するフォルダに含まれる全てのファイルとディレクトリを含む、Git の操作に必要な情報を保存する場所を **Git リポジトリ** と呼ぶことが一般的です。
:::

|Git リポジトリ|概要|
|:--|:--|
|ローカルリポジトリ|Git の管理下に置かれたファイルやディレクトリを含む、自分自身の開発環境にあるリポジトリです。つまり、自分が作成・編集したコードの変更履歴や状態を管理するためのデータベースです。|
|リモートリポジトリ|複数の開発者が協力して開発を行う場合に、共有するために設置されるリポジトリです。リモートリポジトリには、通常、GitHub や GitLab などの WEB サービス上に設置されたものが多くあります。|

## ここまでのまとめ

リモートリポジトリから、**git clone** コマンドでローカルリポジトリを作成することが出来ました。

## リモートリポジトリの URL は？

プロジェクトフォルダに **.git** フォルダが存在した場合、リモートリポジトリを確認することができます。  

リモートリポジトリを確認してみます。  

```sh
$ git remote -v
origin  https://awesome.gitlab.url.com/username/qiita-contents.git (fetch)
origin  https://awesome.gitlab.url.com/username/qiita-contents.git (push)
```

:::note info
上記の例では、リモートリポジトリの名前が **origin** であり、URL は https://awesome.gitlab.url.com/username/qiita-contents.git となっています。  

git remote -v コマンドで表示されるリモートリポジトリの URL の横に表示される **fetch** と **push** は、それぞれリモートリポジトリの**取得**と**送信**に使用される URL であることを示しています。
:::

## プロジェクトをプッシュしてみる

プロジェクト内のファイルを編集してリモートリポジトリにプッシュします。  

:::note info
プロジェクトフォルダ内でファイルを編集した場合、自分が変更を加えたローカルリポジトリから、リモートリポジトリに変更内容を **push** することで、自分の変更をリモートリポジトリに反映させることができます。
:::

ローカルリポジトリの状態を確認します。

```sh
$ git status
ブランチ master
Your branch is up to date with 'origin/master'.

追跡されていないファイル:
  (use "git add <file>..." to include in what will be committed)
        install_git_to_ubuntu.md

nothing added to commit but untracked files present (use "git add" to track)
```

<font color="red">※ 編集されたファイルは実際には赤で表示されています。</font>

しかしこの状態ではリモートリポジトリにプッシュすることは出来ません、ステージングとコミットが必要です。

ステージングします。

```sh
$ git add .
```

:::note info
"**.**" は現在のディレクトリを表し、**add** コマンドによって変更されたファイルを追跡し、ステージングエリアに追加します。※ ファイル名を個別に指定することもできます。
:::

もう一度ローカルリポジトリの状態を確認してみます。

```sh
$ git status
ブランチ master
Your branch is up to date with 'origin/master'.

コミット予定の変更点:
  (use "git restore --staged <file>..." to unstage)
        new file:   install_wsl_and_ubuntu_to_windows.md
```

<font color="limegreen">※ ステージングされたファイルは実際には緑で表示されています。</font>

:::note info
Git におけるステージングとは、変更されたファイルのうち、次のコミットに含めたい変更を選択的に指定することです。つまり、変更したファイルをステージングすることで、次の**コミットに反映させる変更を選ぶこと**ができます。
:::

コミットします。

```sh
$ git commit -m "update"
[master 7786346] update
 1 file changed, 234 insertions(+)
 create mode 100644 install_git_to_ubuntu.md
```

:::note info
**commit** コマンドは、現在のステージングエリアの変更内容をコミットすることを意味します。**-m** は、コミットメッセージを直接コマンドラインで入力するためのオプションです。引用符で囲まれた "update" は、コミットメッセージと呼ばれる変更の概要を示す説明文です。
:::

プッシュします。

```sh
$ git push origin master
Username for 'https://awesome.gitlab.url.com': username
Password for 'https://username@awesome.gitlab.url.com':
Enumerating objects: 4, done.
Counting objects: 100% (4/4), done.
Delta compression using up to 12 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 3.20 KiB | 3.21 MiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
To https://awesome.gitlab.url.com/username/qiita-contents.git
   bfcd803..e2c9495  master -> master
```

:::note info
**push** コマンドで、現在のブランチを **origin** リモートリポジトリの **master** ブランチにプッシュしています。
:::

これでリモートリポジトリにプッシュすることができました。

## まとめ

+ Window 11 の WSL Ubuntu 24.04 LTS に Git をインストールして使用する準備ができました。
+ リモートリポジトリから、プロジェクトをローカルリポジトリとしてクローンすることができました。
+ ローカルリポジトリの編集内容を、リモートリポジトリにプッシュすることができました。

どうでしたか？ Git の操作には、この他にもたくさんのコマンドがあります。みなさんも少しづつ試してみてください。それでは失礼します。