こんにちは。仁科(@nishina555)です。
こちらの記事でConoHaにISUCONの過去問の環境を作成する手順について説明をしました。
ISUCONでは実際にパフォーマンスチューニングをするにあたり、ソースコードなど修正していくことになります。
そのため、ISUCONのソースコードをgitで管理できるようにしておくと非常に便利です。
ConoHaの環境に直接コミットをしても別にいいのですが、リポジトリをForkして自分のGitHubアカウントにISUCONのソースコードを置いておいておく形のほうがよりよいです。
今回はConoHaにあるISUCONのソースコードをForkしてgitで管理する方法について説明をしたいと思います。
目次
ConoHaでは公式のリポジトリをcloneしてきている
まずは現状確認をしてみます。
git remote -v
でリモートリポジトリの向き先を確認してみると公式のリポジトリからcloneされてきたことがわかります。
$ cd /home/isucon/isubata
$ git remote -v
origin https://github.com/isucon/isucon7-qualify (fetch)
origin https://github.com/isucon/isucon7-qualify (push)
本家をForkしたリポジトリをoriginとして管理する
ConoHaでは公式のリポジトリ(以下、本家と呼びます)がリモートリポジトリの向き先として設定されていることがわかりました。
リモートリポジトリの向き先を自分のアカウントに変更するため、本家のリポジトリをForkして自分のアカウント配下にISUCONのリポジトリに持ってきます。
Forkとは本家のリポジトリを自分のリポジトリとしてコピーする方法で、本家のリポジトリの内容を自分で色々とカスタマイズしたいときに利用します。
Forkを利用することで本家のリポジトリを汚すことなく、自由にソースコードを修正し検証ができるため、OSS活動をするときなどに活用します。
Forkの方法ですが、Forkしたいリポジトリで、Forkボタンを押します。

これで自分のアカウント(nishina555)にISUCONのリポジトリ(isucon7-qualify)が作成されました。

Forkしたリポジトリをpush先の新たな向き先として変更しておきます。
$ git remote set-url origin https://github.com/nishina555/isucon7-qualify
本家のリポジトリはupstreamとして管理する
originのpush先を本家のアカウントから自分のアカウントに変更しました。
本家のリポジトリの管理はupstreamという名前で管理するようにします。
本家と自分のアカウント両方をgitで管理することで、本家のリポジトリが更新された場合、Forkしたリポジトリにもその修正を取り込むことができるようになります。
$ git remote add upstream https://github.com/isucon/isucon7-qualify
確認をすると本家と自分のアカウントそれぞれが別名で管理されていることがわかります。
$ git remote -v
origin https://github.com/nishina555/isucon7-qualify (fetch)
origin https://github.com/nishina555/isucon7-qualify (push)
upstream https://github.com/isucon/isucon7-qualify (fetch)
upstream https://github.com/isucon/isucon7-qualify (push)
リモートブランチを含む、すべてのブランチを確認してみると以下のようになっています。
$ git branch -a
* master
remotes/origin/HEAD -> origin/master
remotes/origin/master
remotes/upstream/master
これでブランチ管理の設定は完了したので、originのmasterブランチからトピックブランチを作成して開発をスタートしていきます。
$ git checkout -b test
本家のリポジトリに追加修正がされた場合の対応については以下の記事で説明していますので、参考にしてください。
gitの初期設定をする
新しく借りたVPSで初めてgit commitをするため、以下のようなエラーがでるかもしれないです。
*** Please tell me who you are.
Run
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
to set your account's default identity.
Omit --global to set the identity only in this repository.
fatal: empty ident name (for <isucon@conoha.(none)>) not allowed
これは、gitの初期設定としてメールアドレスとユーザー名が登録されていない場合に起こるエラーです。
以下のコマンドでメールアドレスとユーザー名の設定を行っておきます。
$ git config --global user.email [メールアドレス]
$ git config --global user.name [ユーザー名]
~/.gitconfig
を確認すると先ほど登録した情報が保存されていることがわかります。
$ vim ~/.gitconfig
[user]
email = [メールアドレス]
name = [ユーザー名]
実際にcommitとpushをしてみる
では試しにcommitとpushができるかを試してみます。
ここではtest
というファイルを作成して、pushをしています。
$ touch test
$ git add test
$ git commit -m 'add test'
[test dfdf2dd] add test
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 test
$ git push origin HEAD
Username for 'https://github.com': nishina555
Password for 'https://nishina555@github.com':
Total 0 (delta 0), reused 0 (delta 0)
To https://github.com/nishina555/isucon7-qualify
* [new branch] HEAD -> test
実際に自分のリポジトリをみると先ほどのコミットがpushできていることがわかります。

なお、今はパスワード認証でpushをしている状態となっています。
パスワードなしでpushをするためにはパスワード認証から鍵認証に変更する必要があります。
鍵認証でgit pushする方法については以下の記事を参考にしてください。
ConoHaのISUCON環境をGitで管理できるようにする方法の説明を終わります。おつかれさまでした!
この記事がいいなと思いましたらツイッター(@nishina555)のフォローもよろしくお願いします!