はじめに
private-isuの付録を解く際に、EC2のサーバ上で操作やファイル編集をしていたんですが、差分の確認や何ページまで進めたのか把握が難しかったり、ちょっとしたタイポやインデントミスも起きやすくて、大変でした。
ISUCON当日もサーバ上で作業するのではなく、ローカルで編集→サーバ内でpullして反映という流れが一般的なこと、学習面でもログを見返せたり、便利だと思い、Git管理する方法を調べて実現してみました。その過程をメモとして残したいと思います。
ちなみに、private-isuの付録っていうのは、以下の書籍の内容になります。
そして、Git管理の方法は以下の記事を参考にしました:
① private-isuの環境構築
この記事では、すでに環境構築が終わっている前提で、Git管理の方法に絞って説明していきます。
もし、環境構築がわからない方は、下記の記事がとてもわかりやすいので参考にしてください!
② サーバからGitHubにアクセスするために、公開鍵と秘密鍵を作る
キーファイルを置く.ssh
ディレクトリに移動
private-isu(iscogram)のサーバ内には、すでに.ssh
ディレクトリがあるので、まずはそこに移動します。
$ cd ~/.ssh
注意点
デフォルトだとパーミッションの問題で、コマンド実行やディレクトリの移動ができないかもしれません。
この場合は、スーパーユーザ(管理者権限)に切り替えるか、ログインユーザに権限を付与する必要があります。
スーパーユーザに切り替える方法:
$ sudo -s
sshディレクトリのパーミッション(権限)を設定
$ chmod 744 ~/.ssh/
権限が正しく反映されているか確認:
drwxr--r-- 2 root root 4096 Jun 2 14:00 .ssh
公開鍵と秘密鍵の作成
.ssh
ディレクトリ直下で、次のコマンドを実行します。
$ ssh-keygen -t ed25519
-
ssh-keygen
: SSHキーの生成や管理を行うコマンド -
-t
: 鍵の種類(アルゴリズム)を指定 -
ed25519
: EdDSAという公開鍵アルゴリズム
config
ファイルにGitHubのSSH設定を追加
$ cat >> ~/.ssh/config <<EOL
Host github.com
HostName github.com
IdentityFile ~/.ssh/id_ed25519
User git
EOL
-
cat
:ファイルの内容表示、データを追加するためのコマンド -
>>
:追記するためのリダイレクトオペレータ、指定したファイルの末尾にデータを追加する -
<<[任意の文字列]
:ヒアドキュメントというシェルの機能。指定した文字列が現れるまでの行をファイルに追記する。今回はEOL
(エンドマーカー)が現れるまで、入力されたテキストを追加するという意味になる -
Host
:コマンド実行時に指定する短縮名やエイリアスを指定[任意の名前を設定できる]今回は実際のホスト名と同一のgithub.com
を指定 -
HostName
: 実際に接続するサーバーのホスト名や IP アドレスを指定 -
IdentityFile
:SSH 接続に使用するファイルパスを指定 -
User
:SSH で接続する際のユーザ名。GitHub ではgit
を使用する
config
ファイルのパーミッションを変更
$ chmod 644 config
設定ファイルなので、実行権限は不要です。なので読み取りと書き込みだけ付与します。
③ GitHubにリポジトリを作成し、公開鍵を登録して認証できるようにする
この手順は、こちらの記事を参考にしてください:
④ GitHubにアップロードする
どこまでを対象にするか迷ったのですが、とりあえず設定ファイルや各言語のソースがあるprivate_isu
配下のソースをアップロードしていきたいと思います。(多分本当は使用する言語のソースとかに絞った方が良いのかもしれない)
対象ディレクトリ: /home/isucon/private_isu/
巨大なバイナリが含まれるapp
などはアップロード対象から外したいと思います。
.gitignore
の編集
$ echo "app" >> .gitignore
Gitリポジトリを作成
$ git init
この状態でgit add
やgit status
を実行しようとしたら、以下のエラーが発生。
fatal: detected dubious ownership in repository at '/home/isucon/private_isu'
To add an exception for this directory, call:
git config --global --add safe.directory /home/isucon/private_isu
所有者が異なる、みたいなことが記載されています。
おそらく、ディレクトリの所有者がisucon
ユーザなのに、root
ユーザで操作しているからなのかな?
ログインユーザをisuconに変えても同様に出たので
ログの指示通りに、次のコマンドを実行して、安全なディレクトリとして設定することにしました。
ちゃんとした原因は後日調べたいですね。
$ git config --global --add safe.directory /home/isucon/private_isu
無事設定できたので、コミットします。
$ git commit -m "init"
ブランチ名をmain
に変更
デフォルトでブランチ名がmasterになっていたので変えます
$ git branch -M main
リモートリポジトリと連携(origin
の部分は置き換えてください)
$ git remote add origin git@github.com:hoge/private-isu.git
リモートにプッシュ
$ git push -u origin main
ローカルにクローン
リモートのリポジトリを見て、反映されているのを確認したらローカルにクローンして完了です!
まとめ
以上で、Git管理によってローカルで作業できるようになりました!
好きなエディタも使えるし、差分も見やすいし、かなり作業が楽になりそうです!