【 GitLab 】既存のプロジェクトをリモートリポジトリで管理

Git

主のPC環境一覧

PC:Mac OS[Monterey]
CPU:Intel® Core™ i7
Memory:32GB

PC:Windows11
CPU:Intel® Core™ i9 13900KF
Memory:64GB

Git:2.35.1
GitLab:14.10.0-pre

■ 初めに

以下の記事を参考に、リモートリポジトリを作成しておいてください。

[1]ローカルリポジトリ作成

[1.1]管理対象とするプロジェクトを作成

筆者は、当時 Flutter(Dart言語)の学習をしていたので、そのプロジェクトを用意しました。
本記事内では、プロジェクト(フォルダ)名を「sample_app」として進めます。
異なるプロジェクト名の場合は、適宜ご自身の環境に読み替えて進めてください。

Flutterプロジェクト

本記事の目的としてはローカルで作成したモノをリモートで管理することができれば大成功なので、ぶっちゃけ、ファイル 1つでも良い訳です。
面倒な方は、下記コマンドでちゃちゃっと作ってしまってください。

$ mkdir sample_app
$ touch test.html

[1.2]ローカルリポジトリ初期化

Gitアカウントの設定はお済ですか?

Gitにはローカルでもアカウントがあります。
アカウント設定を行っていないと、リモートで管理する際に誰が履歴を付けたか分からないので必要となります。

その設定ってなに?美味しいの?って思った方は以下の記事を参考にアカウント設定を行っておいてください。

# プロジェクトへ移動
$ cd sample_app

# Gitローカルリポジトリを作成
$ git init

$ ブランチ名を強制的に変更
$ git branch -M main

[1.3]Gitアカウント設定

詳細は前述の記事を参考にしていただきたいので、ここでは設定する方法のみを示します。

# ユーザー名を登録
$ git config --local user.name [username]

# メールアドレスを登録
$ git config --local user.email [mailaddress]

筆者自身は、プロジェクト(ローカル)ごとに設定を行う癖を付けています。
理由は、開発PCに予め設定されているアカウントで誤って履歴をつけてしまい、手戻りが発生する可能性を考慮すると最初から設定している方が良いからです。

ローカルで設定した Gitアカウント情報は「[user]」として設定した内容が追記されます。
場所:.git/config

[core]
        repositoryformatversion = 0
        filemode = true
        bare = false
        logallrefupdates = true
        precomposeunicode = true
[user]
        name = username
        email = mailaddress


---
# 下記コマンドの実行でも設定内容を参照することができます。
$ git config --local -l

使用用途は、リモートリポジトリで管理する際に「誰が」履歴を付けたかの視覚化するためです。
※ 参考記事でも記載していますが、Gitアカウントの設定は必須です。

[1.4]プロジェクトをローカルリポジトリで管理対象とする

# 全てを管理対象としてステージング
$ git add .

# 履歴として保存
$ git commit -m "初期コミット"

# ブランチ名を強制的に「main」へ変更
$ git branch -M main

ブランチ名を強制的に変更するには理由があります。
リモートリポジトリでデフォルトで作成されるブランチ名が mainブランチだからです。
また、Gitをインストールしたタイミングにもよりますが、ローカルリポジトリで作成されるデフォルトでブランチが masterブランチとなります。

リモート側とローカル側でブランチ名が異なっていても問題はないのですが、色々と手間をかける必要があったりする場合があるので、初学者の方はおまじないと思ってください。

以下のコマンドを実行しておくと、ローカルでリポジトリを初期化する際にデフォルトで作成されるブランチ名を固定で決めおくことができるので、今後、「$ git branch -M main」を都度都度実行しなくても良くなります。

$ git config --global init.defaultBranch main

[1.5]リモートリポジトリとローカルリポジトリを紐付け

前回、作成したリモートリポジトリを開き、以下の画像に示すように「HTTPSでクローン」に記載されているアドレス(URL)をコピーしておいてください。

次に、ローカルで以下のコマンドを実行します。

# リモートリポジトリとローカルリポジトリを紐付け
$ git remote add origin [先ほどコピーしたURL]


# 紐付けを行った参照先を表示
$ git remote -v

origin  [先ほどコピーしたURL] (fetch)
origin  [先ほどコピーしたURL] (pull)

[1.6]既存プロジェクト(ローカルリポジトリ)をリモートリポジトリで管理

下記コマンドを実行し、添付画像のようにローカルリポジトリに存在しているプロジェクトが、リモートリポジトリにも反映されていれば成功です。

# リモートリポジトリの最新を取得
$ git fetch

# ローカルリポジトリで付けた履歴をリモートリポジトリへ反映
$ git push origin main

□ 上手くできなかった方について

最も可能性が高い要因としては、恐らく、README.mdの競合(コンフリクト)です。
因みに、私と全く同じ環境で「$ git push origin main」を実行した人は 100%失敗しているでしょう。

  • 要因
    • リモートリポジトリを作成時に「README.md」をデフォルトで作成するか否かを選択することができ、そこで「作成する」を選択した方が、この度、失敗した方となります。
  • 理由
    • 基本的に、フレームワークを使用した開発や利便性が高い言語で開発環境の構築(初期化)を行った場合、README.mdが自動的に最初から作成されていることが多いです。
      その場合、リモートリポジトリとローカルリポジトリの両方に README.mdが存在することになるので、どちらを優先し履歴として残すかの判断がつかないため、競合が発生します。
      ※ ファイルの中身が全く同じだった場合、競合することはありません。
  • 解決方法
    • 競合(コンフリクト)を解決してください。
□ 競合の解決
[1.6.1]コミットの繋ぎ直し
# コミットの繋ぎ直し
$ git rebase origin main


---
# ※ こちらのコマンドでも良いのですが開発現場では主に rebaseを使用するため、上記コマンドを推奨します。
$ git pull

上記コマンドを実行後、競合が発生しているファイルを Visual Studio Code 等で開いてください。
以下、添付画像のようになっていると思います。

赤枠内のボタンでどちらの記述(実装)を採用するかを決めることができるので選択します。
※ 今回は、どちらを採用しても不都合はないので好きな方を選択してください。

ボタン種別
  • Accept Current Change
    • 上半分(リモートリポジトリ側)を採用
  • Accept Incoming Change
    • 下半分(ローカルリポジトリ側)を採用
  • Accept Both Change
    • 両方の内容を 1つに結合
  • Compare Change
    • 画面下部に上下を比較した変更点を表すウィンドウを表示
[1.6.2]履歴の更新(追加)
# 全てをステージング
$ git add .

# 履歴として保存
$ git commit -m "競合を解決"

# コミットの再繋ぎ直し
$ git rebase --continue

# ローカルリポジトリで付けた履歴をリモートリポジトリへ反映
$ git push


---
# 初めて pushコマンドを使用する場合は明示的に push先を示しさなければなりません。
$ git push --set-upstream origin main

初めて「$ git push」を行う場合、以下のエラーが発生するかもしれません。

$ git push


---
fatal: The current branch master has no upstream branch.
To push the current branch and set the remote as upstream, use
   git push --set-upstream origin main

本エラー内容は、最初は明示的に push先を示してあげなければなりません。
また、懇切丁寧にエラーログが「どうしたらよいか」を示してくれています。
そのため指示通りに従い、下記コマンドで再実行しましょう。

$ git push --set-upstream origin main

以上が完了し、改めて GitLab上のリモートリポジトリを確認すると、「[1.6]」で示したように反映されていれば成功です。

■ 最後に

本記事の作成当時は 2年前(2022年)だったのですが、改めて読んでみると分かり辛いなと感じたのでフルリフォームしてみました。

comment 📝

タイトルとURLをコピーしました