Raspberry PiでGitサーバ、Windowsからclone! 後編

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

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



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://(さっき作ったユーザー名):(パスワード)@(さっき設定した任意のホスト名)(リモートリポジトリのパス) (ローカルリポジトリフォルダ名)

例えば私の場合は

git clone ssh://git:password@hoge/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ライフを!!



Raspberry PiでGitサーバ、Windowsからclone! 前編

こんにちは。久しぶりの更新です。

今まで何かアプリケーションを開発する時、日付.zipやバージョン名.zipでクソ管理してきた僕ですが、ついにGitを使うときがやってきました。

訳あってGithub等の外部サービスにリモートリポジトリを置けない状況だったので、自宅にあるRaspberry Pi3でリモートリポジトリを作成し、手元のWindows PCにもGitを入れてそこからclone、pushできる環境を作りました。

Gitってなんだ?という状態から行ったこと、躓いたことを備忘録として書いていこうと思います。

 



Gitってなんだ!

Gitはプログラムのバージョン管理を楽に行っちゃおうっていうツールです。

例えば1人でアプリを開発する場合。新たに機能を追加したいけど、それで何か不具合が起きたら困るし…と、既存のプログラムをoldVersionなんて言う名前にしてバックアップを取り、新たな機能を開発する…。そんな事を繰り返していると、フォルダの中はoldVersion1, oldVersion2, oldVersion2 – コピーと、意味分からないファイルでいっぱい!

または複数人で開発する場合。うまく連携が取れず、気がついたら同じプログラムを複数人で編集してしまい、競合が発生!

こんな経験、ありませんか?
これを全て解決してくれるのが、Gitなのです。

Gitは主に「リモートリポジトリ」「ローカルリポジトリ」「インデックス」「ワーキングツリー」から構成されます。
リポジトリは、ファイルの変更履歴を保存する場所を指します。)

 

・ローカルリポジトリ
個人の変更履歴を保存する場所です。

・ワーキングツリー
ローカルリポジトリにあります。要は作業場です。ここにあるファイル(フォルダ)を編集していきます。

・インデックス
ローカルリポジトリへ変更内容を記録したいワーキングツリーのファイルを、まずはここに格納します。ここに格納されていないファイルは、変更内容がローカルリポジトリへ記録されません。

・リモートリポジトリ
サーバ等へ置き、みんなで共有するリポジトリ。みんなの変更履歴がどんどん追加されていく。基本的にリモートリポジトリはワーキングツリーを持たない。これをベアリポジトリという。

gitでは主なコマンドとして、

clone
add
commit
push
pull

があります。

・clone
リモートリポジトリを、個人(ローカル)のディレクトリへコピーする(クローンを生成する)コマンドです。それがローカルリポジトリとなります。

・add
指定したワーキングツリーのファイル(フォルダ)をインデックスへ格納するコマンドです。

・commit
インデックスにあるファイル(フォルダ)の前回commitからの更新内容をローカルリポジトリへ保存するコマンドです。普通はメッセージを付け、何をどう変更したのかを明白にします。

・push
ローカルリポジトリの中身をリモートリポジトリへ追加するコマンドです。

・pull
誰かが更新し、リモートリポジトリへ追加した内容を、自分のローカルリポジトリへ反映させるコマンドです。

 

他にもbranch等、大事な大事な機能がありますが、今はとにかくRaspberry Piでリモートリポジトリを作ってwinPCでcloneするのが目的なので、今回は省略!

もう文章だらけで飽きましたよね。

百聞は一見に如かず、次回はいよいよRaspberry Piでの作業に移ります!



後編はこちらから!

Raspberry PiでGitサーバ、Windowsからclone! 後編