2016年10月8日

Cygwin + Bitbucket で Git する設定 (コマンドによる Git 入門)

概要
  この投稿では,バージョン管理ソフトウェアである Git を Cygwin 上から利用する方法について,説明する. リモートリポジトリには Bitbucket を利用することを前提とする.また,操作は基本的にコマンドを利用する. 目標は,ローカルにある既存のプロジェクトファイルを,リモートリポジトリへ push することである. なお,この記事は,Git 1 日目の素人によって綴られたことを明記しておく.

【語句】 リポジトリ : プロジェクトのこと (ソースコードのまとまり)
Bitbucket : Git が利用できるリモートリポジトリの一つ.GitHub と異なり,無料で非公開にすることができる
  (ただし,一つのプロジェクトに対して,登録できる人数は 5 名までに限られる)

ローカルリポジトリの作成
  Cygwin のパッケージについて,個別に吟味してインストールするのは手間なので,すべてインストールした

■ Cygwin に Git がインストールされていることは,下記のコマンドによって確認できる
$ git --version
  インストールされていれば,下記のように,Git のバージョンを得る
git version 2.8.3

$ cd コマンドで移動する.(ここでは,ExampleProject という既存のプロジェクトのディレクトリへ移動したとする)
$ cd [対象のプロジェクトファイル内 (リポジトリの作成先)]

■ Git を初期化する
$ git init
Initialized empty Git repository in /[カレントディレクトリ]/.git/
  ここで,$ ls コマンドを実行すると,下記の結果を得る.(カレントディレクトリに [.git] なるファイルが作成されている)
$ ls -a
.  ..  .git  main.cpp  makefile  read_me.txt

■ Git の状態を確認する
$ git status
On branch master

Initial commit

Untracked files:
  (use "git add ..." to include in what will be committed)

        main.cpp
        makefile
        read_me.txt

nothing added to commit but untracked files present (use "git add" to track)
すると,上記のように,$ git add <file>... コマンドでファイルが追加できると教えてくれる

■ Git の管理下に置きたいファイルを追加する
  ファイルを一つずつ追加する場合
$ git add [Gitに追加するファイル]
  ( $ git status コマンドで認識されている,) 全てのファイルを追加する場合 (ファイル名の部分を. にする)
$ git add .
ここで,再び $ git status コマンドを実行すると,下記の結果を得る
$ git status
On branch master

Initial commit

Changes to be committed:
  (use "git rm --cached ..." to unstage)

        new file:   main.cpp
        new file:   makefile
        new file:   read_me.txt
ここでは,ご丁寧に,$ git rm --cached <file>... コマンドでファイルの登録を解除できると教えてくれている

■ ユーザー情報をローカルの Git に登録する
  同一 PC 上で利用する Git のデフォルト値として設定する場合
$ git config --global user.email "email@example.com"
$ git config --global user.name "yourname"
  同一 PC 上であっても,リポジトリごとに,設定を使い分ける場合
$ git config --local user.email "email@example.com"
$ git config --local user.name "yourname"

■ ローカルのリポジトリに commit する
$ git commit -m "コメント (例:first commit)"
なお,commit するには,コメントが必須である. 次は,リモートリポジトリに push する必要があるが,これについては,Bitbucket にリモートリポジトリを作成し,接続を確立した後に述べる

commit 時のコメントを変更する
□ まずは,現在の状況を確認する.
$ git log
commit XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Author: yourname 
Date: Thu Month DD HH:MM:SS YYYY +DiffarenceFromUTC

    コメント (例:first commit)

□ 下記コマンドを実行すると,Vi エディタが開くので,コメントの内容を編集する.
$ git commit --amend
[master 456f3c6] コメント (例:first commit)
 Date: Thu Month DD HH:MM:SS YYYY +DiffarenceFromUTC
 3 files changed, 121 insertions(+)
 create mode 100755 main.cpp
 create mode 100755 makefile
 create mode 100755 read_me.txt
□ もう一度,はじめのコマンドを実行し,期待通りにコメントが編集できていることを確認する.
$ git log
commit XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Author: yourname 
Date: Thu Month DD HH:MM:SS YYYY +DiffarenceFromUTC

    修正したコメント (例:first commit)



リモートリポジトリの作成
  Bitbucket に登録し,任意の名前のリポジトリを作成する.(登録および作成に関しては,非常に簡単なため,省略する)
ここでは,ブラウザ上から Bitbucket 上に ExampleProject という名前のリポジトリを作成したとして,話を進める.

※ もし,コマンドでリモートサーバーに新規リポジトリを作成する方法をご存じの方がいらっしゃれば,教えてください.

リモートリポジトリとの SSH 接続
SSH 接続の設定
  SSH 接続するために,まずは,秘密鍵と公開鍵のペアを作成する

■ 秘密鍵と公開鍵のペアを作成 (※アメリカ国立標準技術研究所は,3072 bits 以上堅牢な鍵を推奨している[9])
$ cd ~/.ssh
$ ssh-keygen -t rsa -b 4096 -C email@example.com
このとき,次の 2 つのファイルが作成されている
$ ls
id_rsa  id_rsa.pub
id_rsa : 秘密鍵 (人に教えてはいけない)
id_rsa.pub : 公開鍵 (人に教えても問題にならない) (pub は,public の pub)

■ 秘密鍵 (id_rsa) のパーミッションを 600 に変更する.(セキュリティの問題)
$ chmod 600 id_rsa
(なお,ssh フォルダのパーミッションは,通常 700 である.変更するには,$ chmod 700 ~/.ssh とすれば良い.
 現在のパーミッションを確認するには,$ cd ~/ ,$ ls -all とすれば良い.
 値は,r(読み取り): 4,w(書き込み): 2,x(実行): 1 である)

■ 作成した秘密鍵と公開鍵を移動しておく
  (~/.ssh/bitbucket/id_rsa, id_rsa.pub を移動し,~/.ssh/bitbucket/id_rsa, ~/.ssh/bitbucket/id_rsa.pub とする)
$ mkdir bitbucket
$ mv id_rsa ./bitbucket
$ mv id_rsa.pub ./bitbucket

■ Cygwin に対して,秘密鍵 (id_rsa) の登録を行う.(恐らく,Cygwin 以外の Unix 系でも同様)
  □ 空のファイルを作成 (~/.ssh/~/.ssh/config を作成)
$ touch config
  □ エディタで開く (当然 Vim や Emacs 以外でも,編集できれば良い)
  ・Vim さんチーム
$ vim config
  ・Emacs さんチーム
$ emacs config
  □ エディタで開いたら,下記のように記入する
Bitbucket と Github の両方を利用する場合は,下記のように両方記入すれば良い. そうでない場合は,必要な方のみ記入すれば良い.(つまり,今回の場合は,上から 7 行だけで良い)
Host bitbucket.org
  HostName bitbucket.org
  IdentityFile ~/.ssh/bitbucket/id_rsa
  User [LogginUserNameOfBitbucket]
  Port 22
  TCPKeepAlive yes
  IdentitiesOnly yes

Host github
  HostName github.com
  IdentityFile ~/.ssh/github/id_rsa
  User [LogginUserNameOfGithub]
  Port 22
  TCPKeepAlive yes
  IdentitiesOnly yes

■ Bitbucket に公開鍵をアップロードする
  非常に簡単なため,省略する.(ここでは,ブラウザから公開鍵をアップロードしたとする)

SSH 接続
■ Bitbucket に SSH 接続する
  (新規接続のため ~/known_hosts ファイルに設定されていない未知のホストであり,) 接続先の信頼性が確立されていないので, 本当に接続したいかと聞いてくるので,yes と入力して Enter キーを押す
$ ssh -T bitbucket.org
The authenticity of host 'bitbucket.org (104.192.143.3)' can't be established.
RSA key fingerprint is SHA256:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.
Are you sure you want to continue connecting (yes/no)? yes <- (yes と入力して Enter)
Warning: Permanently added 'bitbucket.org,104.192.143.3' (RSA) to the list of known hosts.
Connection to bitbucket.org closed by remote host.
すると,known hosts リストに追加したとの結果を得る.
このとき,リモートホストによって,一度接続が切断されたと言っているので,もう一度接続を試みる
$ ssh -T bitbucket.org
Warning: Permanently added the RSA host key for IP address '104.192.143.1' to the list of known hosts.
logged in as [LogginUserNameOfGit].

You can use git or hg to connect to Bitbucket. Shell access is disabled.
今度は,Bitbucket に接続するために,git か hg のプロトコルを使用できる,と言っている.(shell access が無効になっているというのは,2 重に SSH 接続できないという意味???だと思われる)

ここまでで,Bitbucket への SSH 接続が確立した

■ 次回以降の接続
  次回以降接続する場合は,下記のように入力すると,~/.ssh/config の設定が候補として一覧表示される.
$ ssh -T [tab キー][tab キー]
bitbucket.org
  したがって,
ssh -T b[tab キー]
と入力すれば補完機能が働き自動入力される.
リモートリポジトリへの push
  リモートリポジトリへ push する方法は,Bitbucket の誘導が頼りになる.(新しいリポジトリを作成したあとに毎回表示される.ただし再表示できないので注意)

■ リモートリポジトリへ push するためには,下記のコマンドで,ローカルリポジトリの .git/config に設定を追加する必要がある
$ git remote add origin git@bitbucket.org:[LogginUserNameOfGit]/ExampleProject.git
□ もし,リポジトリ名を間違えて登録した場合に,再度,上記コマンドを実行すると,下記のエラーを得る
$ git remote add origin ssh://bitbucket.org/ExampleProject.git
fatal: remote origin already exists.
□ こうした場合,一度下記のコマンドを実行して,ローカルの設定を削除したあと,再設定する
$ git remote rm origin

■ リモートリポジトリへ push する.(このとき,当然 $ ssh -T bitbucket.org を実行して,接続を確立しておく必要がある)
$ git push -u origin --all
Warning: Permanently added the RSA host key for IP address '104.192.143.2' to the list of known hosts.
Counting objects: 4, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (4/4), 7.30 KiB | 0 bytes/s, done.
Total 4 (delta 0), reused 0 (delta 0)
To git@bitbucket.org:[LogginUserNameOfRemoteGit]/ExampleProject.git
 * [new branch]      master -> master
Branch master set up to track remote branch master from origin.

■ タグを全て push する (今回はタグをつけていないので,不要)
$ git push -u origin --tags
Everything up-to-date

ひとまず,以上の操作で,Bitbucket に push できているはずである
2 回目以降の push
  記事が長いので,2 回目の手順だけ簡潔にまとめる

■ Git の管理下に置きたいファイルを追加する
  ファイルを一つずつ追加する場合
$ git add [Gitに追加するファイル]
  ( $ git status コマンドで認識されている,) 全てのファイルを追加する場合 (ファイル名の部分を. にする)
$ git add .
■ ローカルのリポジトリに commit する
$ git commit -m "コメント (例:first commit)"
■ Bitbucket に SSH 接続する
$ ssh -T bitbucket.org
■ リモートリポジトリへ push する
$ git push -u origin --all
■ タグを全て push する (今回はタグをつけていないので,不要)
$ git push -u origin --tags



参考資料 気になる記事

0 件のコメント:

コメントを投稿