主の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
」として進めます。
異なるプロジェクト名の場合は、適宜ご自身の環境に読み替えて進めてください。
[1.2]ローカルリポジトリ初期化
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)
SSHを使用したい場合は、以下の記事を参考にしてください。
[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
以上が完了し、改めて GitLab上のリモートリポジトリを確認すると、「[1.6]」で示したように反映されていれば成功です。
■ 最後に
本記事の作成当時は 2年前(2022年)だったのですが、改めて読んでみると分かり辛いなと感じたのでフルリフォームしてみました。
comment 📝