概要
gitはソフトウェアを開発する上では非常に便利で高機能なバージョン管理ツールですが、その反面に複雑性を極めています。この記事ではブランチ(branch)というgit独特の機能に少し意識を向けながらのレポジトリ作成手順となるので、初心者や慣れていない方に向けた記事です。
Gitの導入と設定がまだの場合は、以下の記事をご参照ください。
実行環境 |
---|
Windows Subsystem for Linux 1 |
git version 2.17.1 |
Gitの導入と設定がまだの場合は、以下の記事をご参照ください。
カレントディレクトリにおいてローカルレポジトリを作成したい場合は、「git init」とコマンドを実行します。
$ git init
Initialized empty Git repository in /user/documents/test/.git/
すると実行されたディレクトリ内に「.git」ディレクトリというgitを操作する上で必要なファイル群が作成されます。
$ ls -a
. .. .git
「git config --list」を実行しgitの設定ファイルを見てみると、リモートレポジトリ先のURLやブランチが設定されいないことが分かります。
$ git config --list
user.name=user-name
user.email=address@gmail.com
core.repositoryformatversion=0
core.filemode=false
core.bare=false
core.logallrefupdates=true
core.ignorecase=true
gitの内容をGitHubサービスに反映させるにはリモートレポジトリのURLを、「git init」で作成したローカルレポジトリのgitの設定ファイルに紐づける必要があります。
なのでGitHubのアカウントを所有していれば、以下のページよりリモート側でレポジトリを作成できます。
「new repository」へ進むと、レポジトリの名前等を設定します。
注意
ここで気を付けたいことが、「Add a README file」等をここで追加してしまうことです。下図のように「Add a README file」にチェックを入れると、デフォルトブランチが「main」としてコミットされます。もしもローカルレポジトリとのコミット履歴等が異なってしまうと整合性がなくリモートへの更新時にエラーが発生してしまいます。他にもマージ(統合)等の作業が必要になるので、ここでは項目にチェックを入れないで「Create repository」とします。
リモート(GitHub)のようで新規ファイルやコミット履歴等が無くまっさらな場合は、下図のような画面へと切り替わります。
上記の実行はローカルリポジトリでの作業となるので、紐づけを行う赤線のURLをコピーしておきます。
作業中のローカルレポジトリがどんな状態かを確認したい時は「git status」と打ちます。
$ git status
On branch master
No commits yet
nothing to commit (create/copy files and use "git add" to track)
ちなみに「On branch master」と表示されているのは、ブランチ(作業場、拠点)が「master」だということです。「git init」でローカルレポジトリを作成した場合、デフォルトブランチはmasterとなります。リモートリポジトリのブランチが異なると更新できませんが、いつでも変更可能です。
では適当にファイルを作成して、再び「git status」を実行します。
# 「test_repoです」を「README.md」に書き込み
$ echo 'test_repoです' > README.md
$ git status
On branch master
No commits yet
Untracked files:
(use "git add <file>..." to include in what will be committed)
READEM.md
nothing added to commit but untracked files present (use "git add" to track)
上記のように作成したファイルである「README.md」が赤く表示されている場合は、レポジトリに対してまだ未適用ということになります。このようにレポジトリを進めて行く場合にファイルを作成した際の状態を確認することができます。
次に作成したファイルをレポジトリに追加します。
$ git add README.md
複数のファイルを一括で追加したい場合は「ファイル名」の部分を「.」ドットに置き換えます。
$ git add .
「status」で状態を確認します。
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
new file: README.md
「new file: ...」として緑色に表示されていればファイルが追加されていることを意味します。しかしまだ「確定」されているわけではありません。あくまで確定(コミット)前の「候補」に過ぎないので、これでレポジトリに確定させたい場合は「git commit -m 'コメント'」と打ちます。
$ git commit -m '最初のコミット'
[master (root-commit) 2cb0335] 最初のコミット
1 file changed, 1 insertion(+)
create mode 100644 README.md
これで確定され、コミット履歴に書き込まれました。
コミット履歴は「git log」で確認できます。
$ git log
commit cbff29c522289376175cd27a1fc56146a34cb062 (HEAD -> master)
Author: User-Name <address@gmail.com>
Date: Mon Jun 6 08:39:43 2022 +0900
最初のコミット
...
上記の表示では、コミットを実行したブランチは「master」であり、ユーザー・日付が記録されています。
過去履歴がある場合はキーボードの「Enter」を叩いて行くと遡ることができ、「q」を叩くことでコミット履歴を抜けられます。
直前にコミットしたコメントを変更したい場合は「git commit --amend」と打ちます。
※実行するとvimエディターとして起動します。
$ git commit --amend
vimエディターとして開くので、以下のように書き込んだら「:wq」で上書きして閉じます。
コメントの変更
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
#
# Date: Mon Jun 6 08:46:37 2022 +0900
#
# On branch master
#
# Initial commit
#
# Changes to be committed:
# new file: README.md
#
再びコミット履歴を確認してみます。
$ git log
commit 4b974b7f420c022a11ac79673ade921fb9c07f98 (HEAD -> master)
Author: User-Name <address@gmail.com>
Date: Mon Jun 6 08:46:37 2022 +0900
コメントの変更
これで作業場であるレポジトリの状態及びファイルの追加と確定は以上です。
作業場であるgitの設定ファイルにどのような設定がされているかは、「git config --list」で確認できました。
$ git config --list
user.name=User-Name
user.email=address@gmail.com
core.repositoryformatversion=0
core.filemode=false
core.bare=false
core.logallrefupdates=true
core.ignorecase=true
現在リモート先であるGitHubのURLは未設定なので、リモート先の確認コマンド「git remote -v」を実行しても何も表示されません。
$ git remote -v
リモートレポジトリのURLを設定するには、「git remote add origin」のあとに紐づけするURLを添えます。
※GitHubで作成したレポジトリのURLを貼り付けています
$ git remote add origin https://github.com/User-name/test_repo.git
リモート先として追加した「origin」は「https://github.com/User-name/test_repo.git」ということです。
gitの設定ファイルを確認してみると「remote.origin...」が追記されています。
$ git config --list
user.name=User-Name
user.email=address@gmail.com
core.repositoryformatversion=0
core.filemode=false
core.bare=false
core.logallrefupdates=true
core.ignorecase=true
remote.origin.url=https://github.com/user-name/test_repo.git
remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
リモート先だけの設定内容を確認してみます。
$ git remote -v
origin https://github.com/user_name/test_repo.git (fetch)
origin https://github.com/user_name/test_repo.git (push)
「オリジンてなんだ?」と思われますが「origin=リモート先URL」として捉えると良いでしょう。
これでリモートレポジトリにファイル等のコミット履歴を更新するためのURLを設定しました。
「origin」に設定されたリモートレポジトリのURLを変更したい場合は「git remote set-url origin」のあとに新たなリモート先となるURLを添えます。
$ git remote set-url origin https://...
確認すると変更されていることが分かります。
$ git remote -v
origin https://... (fetch)
origin https://... (push)
リモートレポジトリのURLを削除したい場合は「git remote rm origin」と打ちます。
$ git remote rm origin
gitの設定ファイルの方で確認してみると、削除されていることがわかります。
$ git config --list
user.name=User-Name
user.email=address@gmail.com
core.repositoryformatversion=0
core.filemode=false
core.bare=false
core.logallrefupdates=true
core.ignorecase=true
これでリモート先のレポジトリを設定し変更などを行えるようになりました。
ローカルで「git init」を実行するとデフォルトブランチは「master」となります。
ブランチの確認は「git branch -v」と打ちます。
$ git branch -v
何も表示されない場合はまだ任意で設定していないという事になります。
しかし「git status」コマンドで現在のブランチを確認できます。
$ git status
On branch master
nothing to commit, working tree clean
「On branch master」が現在の作業場(ブランチ)です。
このまま「master」ブランチとしてリモートレポジトリへ変更の更新を実行しても良いですが、最近のGitHubの動向ではデフォルトブランチを「main」と変更しているので、ローカル側も「main」と設定します。
※「-M」オプションは既存のブランチ名を変更するショートカットキー
$ git branch -M main
再びブランチを確認してみます。
$ git branch -v
* main fa9b369 コメントの変更
直近のコミット履歴と共に現在のブランチが表示されました。
ローカルレポジトリの内容をリモートレポジトリにプッシュ(更新)します。
最初のプッシュはリモート先のデフォルトブランチを設定するために「git push origin main」と打ちます。
originにはリモート先のURLが設定されているので、そのoriginに宛てたブランチ名を添えます。
$ git push origin main
Username for 'https://github.com':ユーザーネーム
Password for 'https://user-name@github.com':アクセストークン
Counting objects: 3, done.
Writing objects: 100% (3/3), 254 bytes | 63.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To https://github.com/user-name/test_repo.git
* [new branch] main -> main
上記のように表示されていれば問題無くローカルレポジトリの内容が送信されたので、リモート側であるGitHubにアクセスしてみます。
以下のようにレポジトリが作成され、ブランチ名も「main」となっています。
プッシュで失敗してしまう場合は、ローカルのデフォルトブランチとリモートのデフォルトブランチが異なっている時によくあります。ブランチ機能は便利な反面、非常に複雑性があるので確認を怠らずにgitライフを送りたいものです。
それでは以上です。
最後までご覧いただきありがとうございました。