とっくんラボ

電子工作、プログラミングで日々の発見や成果をよろづに

Git超初心者がRaspberry PiでGitサーバを構築して、Windowsでcloneするまで! 後編 Git構築

こんにちは。前回に続き、今回は実際にRaspberry PiDebian 8.0)でGitサーバ(リモートリポジトリ)を構築し、Windows PCからcloneしてみます。


tocknlab.hatenablog.com



Raspberry Piにリモートリポジトリを作成!


まずはRaspberry PiにGitをインストールします。

(Raspberry Pi)
apt-get install git

次に、Git専用のユーザーを作成しましょう。今回はgitというユーザーを追加します。

(Raspberry Pi)
useradd -m git
passwd パスワード


そして、リモートリポジトリを作成したいディレクトリ上で(今回は/home/git)

(Raspberry Pi)
cd /home/git
git init --bare --shared hoge.git

こうすることで/home/gitにhoge.gitという名前でリポジトリフォルダが作成されます。
--bareは作成するリポジトリをベアリポジトリとして、--sharedはみんな書き込みできるよ~というオプションです。
ベアリポジトリはフォルダ名に.gitを付けるのが慣例のようです。

ベアリポジトリについては前回の記事を参考に!

ls -a

で、".git"というフォルダが作成されていることが確認できると思います。


一旦これでRaspberry Piでの作業は置いておきます。
次にWindowsでの作業に移ります。



Windows PCでローカルリポジトリを作成!

・Gitのインストール

まずはWindowsにGitをインストールしましょう。
こちらのページよりダウンロードできます。

git-for-windows.github.io

インストール後、私はCygwinからGitを使用していきますが、コマンドプロンプトでもほぼ同じ内容で作業ができると思います。


・鍵の生成、登録

早速clone!と行きたいところですが、まだやらなければいけないことがあります。
Windowsから先ほど作成したRaspberry Piのgitユーザーでssh接続をできるようにします。
まずはWindows PCのわかりやすい場所に.sshというフォルダを作成し、そこに公開鍵とそれに対応する秘密鍵を作成しましょう。


Cygwin

(Windows)
mkdir .ssh
ssh-keygen -t rsa -C "コメント"
Generating public/private rsa key pair.
Enter file in which to save the key (//.ssh/id_rsa): ここに.sshのパスを入れる


すると、指定した.ssh内に「id_rsa」「id_rsa.pub」が生成されることが確認できると思います。この.sshのパスは覚えておいてください。


Raspberry Piに戻り、/home/git(ユーザー名)に「.sshディレクトリを作成し、authorized_keysというファイルを作成しましょう。
そして、「id_rsa.pub」の中身をauthorized_keysへコピーしましょう。

(Raspberry Pi)
mkdir /home/git/.ssh
cd /home/git/.ssh
vim authorized_keys
(id_rsa.pubの中身をコピーして保存)


これでsshの為の鍵の登録は完了しました。
Windowsに戻ります。


次に、clone等をする際に行うsshで使用する秘密鍵の場所を設定してあげます。

(僕はこれを忘れていて、
The authenticity of host '' can't be established.
Host key verification failed.
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
こんなエラーにしばらく悩まされましたとさ…)

(windows)
vim ~/.ssh/config

で設定ファイルを開き、

Host 任意の名前
    Hostname ssh://(さっき作ったユーザー名):(パスワード)@(IPアドレス)(リモートリポジトリのパス)
    User git
    IdentityFile "(さっき鍵を作ったパス)"
    Port 22

このように書き込みます。
IPアドレスの欄には、内部ネットワークから接続する場合はRaspberry PiのプライベートIPアドレスを、外部ネットワークから接続する場合はグローバルIPアドレスを入れましょう。
例えば

Host hoge
    Hostname ssh://git:password@192.168.0.50/home/git/hoge.git
    User git
    IdentityFile "c:/Users/$user_profile/.ssh/id_rsa"
    Port 22

こんな感じになります。


・いざclone!

これでようやくcloneの準備が整いました。
ローカルリポジトリを作成したいディレクトリへ移動し、以下のコマンドを実行します

git clone ssh://(さっき作ったユーザー名):(パスワード)@(IPアドレス)(リモートリポジトリのパス) (ローカルリポジトリフォルダ名)

例えば私の場合は

git clone ssh://git:password@192.168.0.50/home/git/hoge.git hoge

になります。


これでようやくcloneができましたね!(おそらく空のリポジトリをクローンしたよ!平気?という警告メッセージが出るかと思いますが、無視してください。)

ls -a

で、".git"というフォルダが作成されていることが確認できると思います。


・あとはこっちのモンだ

早速commit、pushしていきましょう!

ワーキングツリーで適当にファイルを作って…(ここではtest.txtを作りました)

(Windows)
git status

これで、インデックスに追加されていない変更内容を確認できます。

On branch master
Untracked files:
  (use "git add <file>..." to include in what will be committed)

        test.txt

nothing added to commit but untracked files present (use "git add" to track)

test.txtが変更されてるけど追加されてないよ~って言ってますね

addでインデックスへ追加してあげましょう。

(Windows)
git add test.txt

そして

(Windows)
git status

On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        new file:   test.txt

これで準備完了!commitしましょう。

git commit -m "test.txtを追加"

-mオプションを付けて、スペース空けて後ろにコメントを書きます。主にどのような更新をしたのかを記しましょう。

最後にpush!
初回のpushでは、-uオプションを付けましょう。

git push -u ssh://(さっき作ったユーザー名):(パスワード)@(IPアドレス)(リモートリポジトリのパス) master

無事pushできましたか?


ここで、毎回毎回pushの度にssh://~~を入力していたら大変ですよね。それを省略する機能を使いましょう。

git remote add origin ssh://(さっき作ったユーザー名):(パスワード)@(IPアドレス)(リモートリポジトリのパス)

このように、ホストをoriginという名前に対応させましょう。すると

git push

このように省略が可能になりました。

ちなみに、こう書けるのは対応した名前が"origin"の時のみで、別名を付けた場合は

git push 付けた名前

としましょう。

pullしたい時は、同じように

git pull

もしくは

git pull 付けた名前

するだけです。


・終わった…

これで一通り環境が整ったのではないでしょうか!(書き忘れていることがあるような気がしますが…)

長かった…疲れた…後半はテキトーに書いてました。

ここが違うよ!できないよ!といった意見がございましたら、どしどしコメントをください!


それでは!良いGitライフを!!