2014年11月20日木曜日

ubuntu14.10でGit

仮想サーバー(ubuntu14.10)でGitを使ってみる。

Git用のユーザーとグループ作成
sudo groupadd git
sudo adduser -g git git
(useraddしたらフォルダが作成されなくて以下のコマンドでエラーが出た)

とりあえずgitユーザを追加して、みんなgitさんとしてプッシュするという風になったが、
ユーザ数だけサーバーに登録して、下記のユーザー登録を行えば、
コミットログにユーザー名が記録されるので、機能を制限してユーザー登録したほうがいい。

Gitインストール
ubuntuだと以下でインストールできる。

sudo apt-get install git

ユーザー登録
ユーザー登録を行う。公開リポジトリの場合、メールアドレスとか公開されちゃうので注意。

git config --global user.name "username"
git config --global user.mail mail@hoge.com

設定の確認は
git config --global -l

変更したい場合は同じコマンドを使用して上書きする。

Gitリポジトリ作成
任意の場所にディレクトリを作成してgit initする。
これでリポジトリは作成完了。
後はEclipseからssh接続してclone,commit,pushする。

Gitリポジトリの所有権を変更する
Gitリポジトリの所有権がrootだった場合には、gitグループを作成して、所有権を変更する。


クライアント(Eclipse)接続するのに必要なsshの設定
安全の為に鍵認証を行う。
GitではSSHの公開鍵認証を使用しているので、それに倣う。
クライアントPCからCygwin起動して鍵を生成する。
ホストから作成してもOK。

ssh-keygen

生成場所はデフォルト、passheraseを設定すると、パスワードを聞かれるようになる。
鍵をscpコマンドでサーバーに送る。

scp -P [ポート番号] /home/user/.ssh/id_rsa.pub user@server-name

サーバーにリモートアクセスして、以下実行。

mkdir ~/.ssh
chmod 700 ~/.ssh
cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
rm ~/id_rsa.pub
chmod 600 ~/authorized_keys

/etc/ssh/sshd_configの以下の行のコメントを外し、authorized_keysを有効にする。

#AuthorizedKeysFile %h/.ssh/athorized_keys

クライアント側からアクセスして確認。

ssh -p [ポート番号] user@server-name

アクセスできたらsshd_configの以下の行を編集し、ルートでのログイン無効、パスワード認証を無効にする。
PermitRootLogin yes -> noに変更する。
#Change to no to disable tunnelled clear text passwords
#PasswordAuthentication yes <- ここをコメントを外し、noにする。

複数の鍵を管理する方法(Cygwin)
~/.bashrcに以下を追加して、configファイルを見るようにする。
初期設定のままだと、configファイルは見ないようになっている。

#.ssh/configの読込
alias ssh='ssh -F ~/.ssh/config
alias scp='scp -F ~/.ssh/config

~/.ssh/configファイルを作成する。
vi ~/.ssh/config
内容は簡単に以下。

IdentityFile ~/.ssh/id_rsa
IdentityFile ~/.ssh/id_rsa.softserver2

という感じ。


Eclipseでサーバーのリポジトリを取り込む(cloneする)
eclipse->window->preferences->general->network connection->ssh2->generalのssh2 homeに、
先ほど作成した鍵のディレクトリを指定する。
Git Repositoriesの右上のアイコンからリポジトリのクローンを選択して、該当リポジトリをクローンする。
urlは以下のように指定する。

ssh://user@hostname:port/リポジトリの.gitがある場所をフルパス指定

取り込んだリポジトリをインポートする
Git Repositrories画面にクローンしてきたリポジトリの先頭で右クリック->Import Projects
でProject Explorerに該当のプロジェクトがインポート(svnでいうところのチェックアウト)される。

.gitignoreを追加する
最初は.gitignoreファイルはないので、新規作成する。
内容は以下のように設定する。svnのignoreと同じ感じ。

.project
*.~

変更をcommitする
右クリック->Syncronize Workspaceでローカルリポジトリの差分を確認する。
変更に間違いがなければ右クリック->commit

pull
自分のローカルリポジトリをサーバーの最新状態に更新すること。

clone,commitはできるけどpushできない
やってみたこと
サーバー設定で、
git config --get-all core.bare
>false <-falseだったら以下実行

config --bool core.bare true
確認
git config --get-all core.bare
>true <-成功

原因は。。
以下のエラーが出てpushできなかったのだが、
Can't connect to any repository: ssh://inouey@ubuntu-ino:53/var/lib/git/TestGit (Nothing to push.)
これはpushするのはどれなのか指定していなかったせいで出ていたエラーのようだ。

Push Ref Specifications画面で、Source refの選択をして、その右の+Add Specボタンを押す。するとSpecifications for push 画面にpush する候補が表示されるので、選択するとpushできた。

0 件のコメント:

コメントを投稿