2013年11月8日金曜日

GitとGitHubかBitbucketを利用してソースのバックアップを取る

楽天優勝おめでとうございます。

Gitは本来プロジェクトやコードのバージョン管理をするツールですが、僕らの研究ではあまり使う機会がありません。
でも使い方によってはBitbucketやGitHubなどのウェブサービスと一緒に使うことでソースコードのバックアップを取ることができます。
しかも他のPCからも疑似的に同期できます。
手動ですが。
Dropboxで同期してるから大丈夫だと思ってても、ファイルを消してしまったら同期しているPC全てでそのファイルが消えてしまうので安全ではないです。

以下に書くことは僕もまだ学習中なので、おかしな点があればご指摘お願いします。

Git, GitHub, Bitbucketとは

バージョン管理システムっていうのはGitに限らず、CVSとかSubversionなどというものもあって、今一番旬なのがGitです。
GitHubやBitbucketっていうのはGitのホスティングサービスとかいうやつで、Gitで管理しているプロジェクトのバックアップ先だと思っていいです。
Gitに対応したホスティングサービスは以下に比較があります。
Gitホスティングサービス5選【比較表付き】 | Find Job ! Startup
GitHubは有料会員にならない限り、アップしてるソースが全世界に公開されるのに対し、Bitbucketは逆に無料会員だと基本的に公開はされません。
他人と共同作業したいならGitHub、個人で利用ならBitbucketがいいと思います。
僕は一応両方登録してて、今のところEmacsの設定だけGitHubに上がってます。

Gitの設定

まずやることは、ローカルのPC内でGitの初期設定です。
以下のコマンドをターミナルから一つずつ打ちます。
名前などは適宜変えてください。
git config --global user.name "Your Name"
git config --global user.email "your_email@example.com"
そうすると、「~/.gitconfig」に以上の内容が書き込まれます。
このファイルを直接いじることも可能です。
GitHubだとこれらのデータが全世界に知れ渡る可能性があるので、ニックネームとかでもいいです。(mmmmiya_rなど)

次はバックアップを取りたいプロジェクト内での設定です。
もし研究専用のフォルダがあるならそのフォルダがいいと思います。
僕みたいに中にサブフォルダがいくつもある人は、そのルートフォルダごとバックアップを取るのがいいでしょう。
色んなフォルダで独立して管理しているなら、そのフォルダごとに設定をすることになります。

Gitの使い方

まず簡単なGitの使い方から説明します。
ターミナルで管理したいフォルダに移動してください。
ここでは「program」というフォルダ名にしときます。
cd program
そしたらば、次はそのフォルダをGitの対象にするために以下のコマンドを入力します。
git init
これで、「program」の中に「.git」というフォルダができます。
この「.git」というフォルダの中に、これから先行う全てのバージョンの情報が保存されていくことになります。
これをリポジトリというらしいです。

次は「program」内の全てのファイルをバージョン管理の対象にすることをGitに伝えるために以下を入力します。
git add .
ドット(.)があることに注意してください。
ドットはカレントディレクトリを表すので、カレントディレクトリ以下の全てのフォルダが対象になります。

この段階ではまだ一つのバージョンとして保存はされていません。
なので、この一番最初のバージョンを作るために以下を入力します。
git commit -m "First commit."
このcommitまでやって始めて一つのバージョンができあがります。
-mのオプションは、後で見返したときにどういう変更が行われたのか分かりやすいようにメッセージを付けるオプションで、省略するとエディタが立ち上がって入力画面になります。
何も書かずに終了したらcommitされません。

そして、今フォルダ内の「text.txt」というファイルをいじったとします。
このいじった内容を次のバージョンとして保存したい場合は、順番に
git add text.txt
git commit -m "text.txt is modified."
とします。

ここまでまとめると、「git add」でファイルを次のバージョン管理の対象にして、「git commit」で一つのバージョンとして保存しておく、ということになります。

このように2段階になっている理由は、複数のファイルの変更したけど特定のファイルは次のバージョンに入れたくない場合があるからです。
ただ単にバックアップ目的ならば、全ての変更ファイルや新しく作ったファイルをまとめてaddしたいと思うでしょう。
そのときは
git add -A
これでOKです。
また、git addとgit commitの二段階踏むのめんどくさいと思う人は
git commit -a
これでgit add -A してgit commitしたことと同じになります。

.gitignore

さて、まだ本題に入る前にもう少しだけGitの説明します。
git add -Aっていうのは全てのファイルをバージョン管理の対象とするので、Emacsの一時保存ファイルなんかも対象になってしまいます。
こういういらないデータをGitの対象外にするには「program」直下に「.gitignore」というファイルを作ってそこに一覧を書いておきます。
例えば
# Emacs temp files
*~
[#]*[#]
.\#*
といった具合に正規表現(正式にはglobパターン)が使えます。
C言語使っている人なら、「~.o」ファイルなどアーキテクチャに依存するファイルも対象外にしたいかと思います。
以下に色んな言語に対応した「.gitignore」のテンプレートがあります。
https://github.com/github/gitignore

git commitまで使いこなせないと目的のバックアップを取るとこまで辿りつけないので練習しましょう。

GitHub, Bitbucketとの連携

さてここからはGitのホスティングサービスの説明に移らさせていただきます。
GitHubかBitbucketどっち使うか決めたら登録してください。
ニックネームやメールアドレスは、さっきやったgit configのものを使ったほうがいいかもしれません。
以下「user-name」という名前で登録したと仮定します。

SSHキー

PCとGitHubがSSHを利用した公開鍵認証で接続されるので、まずはその鍵を生成します。
ローカルPCで以下を入力します。
ssh-keygen -t rsa -C "your_email@example.com"

そしたらどこに保存するか聞かれて、これはデフォルトでいいので[Enter]を押します。
そして2回パスフレーズ(パスワードみたいなもの)を入力したら変なアスキーアートみたいなのが表示されて完了です。
「~/.ssh/id_rsa.pub」というファイルに書き込まれます。

で、これをGitHubかBitbucketのサイト上で登録します。
GitHubなら「Account settings」の「SSH Keys」で適当なタイトル(例えばPCのマシン名)を付けて、「~/.ssh/id_rsa.pub」のファイルの中身をそのままKeyにコピペしてAdd keyしてください。
Bitbucketでも同様に設定画面からSSHキーの追加ができます。
これでPCからのアクセスでいちいちパスワード入力しなくてよくなるはずです。

リポジトリ生成

次はバックアップ用のフォルダをサイト上で作ります。
サイト上でリポジトリを作成してください。
GitHubなら右上の方にある「Create a new repo」を押すといいです。
Bitbucketなら、日本語の表示にしていたら上部の「作成」を押すといいです。
そしたらレポジトリの名前なんかを入力します。
フォルダ名と同じ「program」がいいかもしれません。
あとは手順通りに作成しますが、GitHubだとReadmeファイルを作るかとかライセンスはどうするかといったことまで聞かれると思いますが、作らなくていいです。
これで空のレポジトリができて、GitHubでもBitbucketでもこの後どうすべきか指示が出るはずです。
一応この画面を消さずに残しといてください。
コピペで使える部分があります。

ローカルPCでの設定

もう少し続きますよ。
次は今サイト上で作ったリポジトリを、PC内でバックアップ先として指定するための設定を行います。
PC上のターミナルで「program」に入ってください。
GitHubを使っている場合は以下を入力します。
git remote add origin https://github.com/user-name/program.git
Bitbucketなら以下です。
git remote add origin ssh://git@bitbucket.org/user-name/program.git
以上のコマンドはさっき残しておけと書いたページに書いてあるのでコピペでいけます。

何をやっているのかというと、バックアップ先にoriginという名前を付けて登録しています。
バックアップ先は多分何個も登録できるのですが、ややこしくなりそうなのでやめたほうがいいかもしれません。

アップロード

ここまできて、やっとバックアップを取る準備が整いました。
あとはPCのターミナルで「program」に入って以下を入力します。
git push -u origin master
こうすると転送が始まってサイト上にアップロードされるというわけです。
追記:Bitbucketだとこれじゃいかないかもしれなくて、さっき残しておいたページの説明通りにやれば進められるはずです。

もしさっきサイト上でリポジトリ作ったときに、Readmeファイルなどを作ってしまっていると既に別のファイルが存在してしまっているというエラーが出ます。
そのときは一度
git pull origin master
って打てばどちらのファイルも維持されたまま併合(マージ)されます。
その後にgit pushしてください。

日々の生活

さて、これで一通り設定は終わりです。
あとはこまめにgit addとgit commitをやって、一日の終わりなどに
git push
とやれば、その日の変更履歴がサイト上にアップロードされるというわけです。
MacではSourceTreeというGUIソフトがあるのでGUIしか使えない人も便利かもしれません。
Free Mercurial and Git Client for Windows and Mac | Atlassian SourceTree

他のPCで同期したい

サイト上のバックアップを他のPCにダウンロードして使うには
git clone https://github.com/user-name/program.git
でできます。
Bitbucketなら
git clone https://user-name@bitbucket.org/user-name/program.git
この中に.gitフォルダも既に含まれているはずなので、そのPCのSSHキーの登録が済んでいればgit remoteの設定なんかは要らずに、
git push
これだけでそのPC内の変更がサイト上に反映されるはずです。
元のPCでは
git pull
これだけでサイト上の最新版に更新できるはずです。
複数のPCで使いたい場合はDropboxなどでの同期は止めたほうがいいかもしれません。
conflictsなどのエラーが出てしまったときはGitのもう少し詳しい使い方知っていないといけないのでめんどくさいです。

以上で発表を終わらさせていただきます。
Thank you for your listening.

0 件のコメント :

コメントを投稿