前回の記事であるネット環境のないAIX7.1にGitを導入し使えるようにするまで(YUMを使わずに)の続きです。
Gitをインストールしてから、使えるようにするまでです。(AIXと書いてますが別にubuntuでも他Linuxでも一緒だと思います)
普段はGitHub DesktopとGitHubしか使わないためにGitサーバーという発想は全くありませんでした。
しかしAIXが外に繋げないため、GitHubにpushしたソース類をAIX上でssh等でcloneすることは出来ないので
AIXをGitサーバー化させ、各自作業者のPCからpushして管理する案しか残らないのでした。
どうやるの?って話ですが、gitサーバー構築
とかでググると色々でてきますが一応書きます。
参考にさせて頂いた記事
git-daemonを使用するのもアリだったのですがもう疲れていたのでまだちょっと知ってるssh接続を前提とします。
ssh接続の設定(クライアント側)
まずは、各自ユーザーがssh公開鍵を作成しないとだめです。
詳細は、Git/GitHub公式のHow Toがあります。
自身はMac OSを前提として書きます。 (Windowsの場合はまずGitをインストールし、GitBash上で下記コマンドの入力をお願いします)
- 自身が公開鍵を持っているか確認する
.ssh $ cd
~ $ cd ~/.ssh
.ssh $ ls
config id_rsa id_rsa.pub known_hosts
- 無い場合は、下記コマンドを行う
$ mkdir .ssh
$ cd .ssh
.ssh $ ssh-keygen
実行場所は、Macなら/Users/xxxx/.ssh
WindowsならC/Users/xxxx/.ssh
xxxxは自分の名前。
鍵の保存先を求められるので、.ssh/id_rsa
を指定する
パスフレーズも求められるが、それはEnterを押してとりあえず無で良い。
ここまで出来たら、上記のようにid_rsa
とid_rsa.pub
が作成されているはず。
id_rsa
は秘密鍵で、id_rsa.pub
は公開鍵となります。
id_rsa.pub
の内容をcat
などで確認しておく。
ssh接続の設定(サーバー側)
公式ではgit
というユーザーを作成し、そのユーザーがgitレポジトリをアクセスできるようにしているので、
それを前提とします。
まず、下記を行います。(.sshディレクトリが無い場合)
$ mkdir /home/git/.ssh
適当にtmpディレクトリ等を/home/git
に作成します。
$ mkdir tmp
先ほどのid_rsa.pub
を/home/git/tmp
に置きます。(FTPなどで)
authorized_keys
を作成します
$ touch /home/git/.ssh/authorized_keys
authorized_keys
に公開鍵の内容を書き込みます。
cat id_rsa.pub >> /home/git/.ssh/authorized_keys
上記のid_rsa.pub
をサーバーに置く、authorized_keys
に内容を書き込む、はメンバー分行う必要があります。
すなわち、サーバー側の作業として、セットアップを行う各メンバーも上記作業だけは行なってください。
でないと、もちろんなんですがローカルPCからgit pull
を行う際に権限ないよ、って言われます。
ベアレポジトリの作成
次にベアレポジトリと呼ばれるGitの更新情報等だけを保持するディレクトリを作成します。
ベアレポジトリとノンベアレポジトリについては下記記事がわかりやすかったです。
gitのベアリポジトリとノンベアリポジトリ
これもサーバー側とクライアント側の作業があります
- サーバー側
$ cd work
$ mkdir work.git
$ cd work.git
$ git init --bare --shared
work.git
のディレクトリを作成することにより、gitにここはリモートレポジトリですよと教えてあげます。
そしてgit init --bare
オプションにより、ベアレポジトリを新規に作成してもらいます
複数人で作業をする場合は、--shared
オプションが必要です
- クライアント側
$ mkdir work
work $ cd work
work $ echo "Hi this is local" > a.txt
work $ git init
work $ git add .
work $ git commit -m 'first commit'
クライアント側はベアレポジトリを作成というよりかは、
作業ディレクトリ(ノンベアレポジトリ)をポイントするようなイメージです。
クライアントPCからレモートレポジトリにpushする
再度クライアントに戻り、
work $ git remote add origin ssh://git@server_hostname:/home/git/work/work.git
上記により、git
というユーザーで指定されたサーバーのベアレポジトリにpushせよ!という指示します。
work $ git remote -v
origin ssh://git@server_hostname:/home/git/work/work.git (fetch)
origin ssh://git@server_hostname:/home/git/work/work.git (push)
こんな感じになっていればOKです。もし間違えていたら、git remote rm origin
で削除してもう一回やりましょう
あとはpushするのみ!
work $ git push origin master
サーバー側で、git log
をしてみましょう。現在のコミットが表示されているはずです。
ここで、**いやいやpushしたファイルはサーバー上のどこにあんの!?**となりました。
確かにwork.gitをlsしても
work.git> $ ls
HEAD branches config description hooks info objects refs
こんなのしかない。
実際にpushされたファイルは、
XXX.gitではないディレクトリで
git clone work.git
を行うことで見れます。
とりあえずこんな感じです。
上記のcloneレポジトリはこのままだと毎回 git pull
を行わないと各ローカルPCからのpushが反映されないため、下記設定を行う必要があります。
git pullを自動で行う
Pushエラーがでた場合
基本的に、上記git add .
、 git commit
の流れはサーバー側にソースがないことを前提にしている気がする。
もしサーバー上で何かしら変更があった場合、自身で適当に作ったa.txt
のpushが失敗します。
なのでとりあえず通信確認を行いたい場合は
git pull origin master
をgit remote
で登録した後に行えばよいです。
GitHub Desktopと連携する
追記
ここまでのセットアップが完了し、個人のPCからサーバーにgitコマンドが不自由なくできている場合。
GitHub Desktopでも連携が可能でした。
*少々画像を修正していますのでご了承ください