ラベル GitHub の投稿を表示しています。 すべての投稿を表示
ラベル GitHub の投稿を表示しています。 すべての投稿を表示

2010年7月30日金曜日

Windows で GitHub の利用 - msysgit, TortoiseGit を使って

0. 目次

  1. Git の特徴
  2. Windows で msysgit
  3. GitHub でリポジトリを作成
  4. 日本語の設定
  5. Git を使うためのクライアント - TortoiseGit
  6. Git のコマンドを使ってみる

 

1. Git の特徴

SnapCrab_No-1007ソースコードの管理に GitHub を利用してみる。

Git - Wikipedia とは、

プログラムなどのソースコード管理を行う分散型バージョン管理システム。動作速度に重点が置かれている。Linuxカーネルのソースコード管理を目的として、リーナス・トーバルズによって開発された。

特徴を押さえておく。

Gitは、arch等にも採用される分散リポジトリをサポートしており、

  • 中央リポジトリからコピーする
  • コピーしたリポジトリを編集し、コンテンツの修正、追加、削除を行う
  • ローカルへコミットする
  • 中央リポジトリへ変更内容を反映させる

という形で行われる。

リポジトリへのアクセスは

  • ローカル
  • WebDAV
  • Git 独自プロトコル
  • rsync
  • ssh

を用いる(書き込みができるのはローカル、WebDAV および ssh)。

(同上より)

分散バージョン管理なので、基本的な考え方として、

… ローカルのリポジトリ(master)をリモートのリポジトリ(origin)にプッシュ、つまり反映させます。

(せっかちな人のための git 入門 - git をインストールし、共同で開発できる環境を整えるまで : 僕は発展途上技術者 より)

詳しくは以下を参照。

 

2. Windows で msysgit

SnapCrab_No-1013Windows で git を使うために 「github を Windows で使ってみる | Numb.」 を参考にした。

をダウンロードしてインストール。

( はじめて msysgit を設定したときは、msysGit-netinstall-1.5.4-rc0-preview20071217.exe を利用した。今回は Git-1.7.0.2-preview20100309.exe 。)

とっても優しい github の使い方 - ¬¬日常日記 によると、

あ、私のようなgit初心者の方は、まず最初に … 名前とメールアドレスを設定しておいて下さい。これを忘れるとマシン名とかがコミットログに残って恥ずかしい感じになります。

最初に、名前とメールアドレスを設定しておく。

git config --global user.name "名前"
git config --global user.email メールアドレス

これにより、環境変数 %HOME% 以下に .gitconfig ファイルが作成された。

 

3. GitHub でリポジトリを作成

  1. SnapCrab_No-1014 Your Dashboard – GitHub において Create a Repository により新規にリポジトリを作成。
  2. 最低限 Project Name を記述し、 Create Repository ボタンを押す。
  3. この後に行うコマンドライン上での作業が表示される。
  4. Global setup については上記で既に行なったので、それ以降の作業を行う。

 

SSH-key の作成

リポジトリへアクセスするための認証用に SSH-key を作成。

先ほどインストールした Git Bash を起動して、

ssh-keygen -t rsa –C "メールアドレス"

( Help.GitHub - Generating SSH keys (Win/msysgit) より )

これにより環境変数 %HOME% 以下に .ssh フォルダが作成され、その中に

  • id_rsa
  • id_rsa.pub

の二つのファイルができる。

この内、id_rsa.pub の内容を Your Account - GitHub の SSH Public Keys に設定。

 

git remote コマンドにより、リモートのリポジトリを指定

上記の「コマンドライン上での作業」における Next steps: には、次のように書かれていた。

mkdir プロジェクト名
cd プロジェクト名
git init
touch README
git add README
git commit -m 'first commit'
git remote add origin git@github.com:ユーザ名/プロジェクト名.git
git push origin master

ファイル README を追加した後、コミットして、プッシュするという作業の流れ。

プッシュする前のコマンド git remote add は、git-remote(1) によると、

git remote add [-t <branch>] [-m <master>] [-f] [--tags|--no-tags] [--mirror] <name> <url>

ここでの add の意味は、

add

Adds a remote named <name> for the repository at <url>.

name と url を結び付ける。

git push では、上記で設定した name を指定。

git-push(1) の Examples によると、

git push origin master

Find a ref that matches master in the source repository (most likely, it would find refs/heads/master), and update the same ref (e.g. refs/heads/master) in origin repository with it. If master did not exist remotely, it would be created.

初回の実行では master がリモートに作成される。

 

4. 日本語の設定

を参考にして、日本語の設定を行う。

C:\Program Files\Git\bin に less と nkf を配置。

C:\Program Files\Git\etc\inputrc に以下を記述。

set convert-meta off
set meta-flag on
set output-meta on
set kanji-code utf-8

(WindowsでのGit環境構築とその注意点 より)

C:\Program Files\Git\etc\profile に以下を追記。

export GIT_EDITOR="'<使用するテキストエディタのパス>'"
export GIT_PAGER="nkf -s | less"

このとき、テキストエディタのパス中の「\」は「/」に、「C:」は「/c」に置き換えて指定する。

(同上より)

これにより、ソースコードが変更されたフォルダで、Git Bash を起動 (右クリック > Git Bash) し、

git diff ファイル名

を実行すると、日本語が表示される。

ファイルの中身を見たいときは、

nkf –s ファイル名 | less

 

5. Git を使うためのクライアント - TortoiseGit

SnapCrab_No-1006コマンドライン上での操作ではなく、GUI で Git を扱いたいなら TortoiseGit tortoisegit を使う。TortoiseSVN に慣れている場合は、これを使うのが良い。

Download – tortoisegit より、「本体」と「言語パック」をダウンロードする。

 

日本語化

言語パックをインストールした後、

  • TortoiseGit > Settgings > General > TortoiseGit > Language:

において、日本語を選択する。

SnapCrab_No-1004

 

SSH

を参考にして SSH を設定。

TortoiseGitの設定ダイアログを開き、「Network」の「SSH client」にmsysgit付属のssh.exeを指定する。

上記では 「OpenSSHの秘密鍵をPuTTY形式に変換して使う」 方法も書かれている。

 

6. Git のコマンドを使ってみる

まずは、基本的なところで 「github を Windows で使ってみる | Numb.」 より、

git add README
README というファイルをリポジトリに追加
git commit -m ‘first commit’
ローカルのリポジトリに変更を適用 ‘first…’ のところはコメント
git push origin master
リモートリポジトリに変更を適用( master を origin に push )
( cd hogehoge )
git pull origin master
(ローカルリポジトリのディレクトリに移動して)リモートリポジトリの変更をローカルリポジトリに適用

その他、解説しているサイトを試して慣れる。

コマンドの解説としては以下を参照。

 

チェックアウト

既にリポジトリにソースが存在し、チェックアウトするには、予め GitHub で SSH の URL コピーしておく。

Git Bash において、

git clone git@github.com:ユーザ名/プロジェクト名.git

このとき公開鍵を作成したときのパスワードを入力。

TortoiseGit を使う場合は、適当なフォルダで右クリック > Git Clone… 。github にある SSH の URL を入力して Web を選択。

 

コミットとプッシュ
  1. TortoiseGit を使うなら、ソースコードを変更した後、右クリック > Git Commit –> “master”… 。
  2. ローカルの変更をリモートに反映させるには、右クリック > Tortoise Git > Push 。

 

ブランチの削除

間違えて作成したブランチを削除したい。

リモートのブランチの削除は
% git push origin :experimental

( GitHubをRemote Repoとして、MacにインストールしたGitから使ってみる:Goodpic より)

git-push(1) によると、

git push origin :experimental

     Find a ref that matches experimental in the origin repository (e.g. refs/heads/experimental), and delete it.

Git Bash を起動し、上記 experimental の代わりに、GitHub のリポジトリのページにある `Switch Branches’ に表示される `削除したいブランチ名’ を入れて実行する。

2009年10月6日火曜日

Google 検索と同時に Google ブックマーク の検索結果を表示する Greasemonkey スクリプト

ブックマークの保存に Google ブックマーク

保存しておきたいサイトやページは全て Google ブックマーク で管理している。Firefox のブックマークは、ツールバーに頻繁に見るサイトを置いているのと、「あとで読む」用の一時的な保管場所として使っているのみ。ブックマークをツリー状に整理整頓しなくなって久しい。 ^^;

オンラインブックマークに移行して随分経過した。当初、はてブ を使うことも考えたけれど、完全にプライベート目的だったので Google ブックマークを選んだ。

 

Firefox のアドオン Gmarks で素早く入力

Google ブックマークを使うときは、Firefox のアドオン GMarks を利用。ブックマークしたくなったら、Ctrl + D で素早くブックマーク。後で検索できるように、なるべく多くタグを付けておく。分類目的のタグに加え、読んだときに気になった単語、「おもしろい」「なるほど」などという感想もタグとして付ける。場合によっては、そこから連想すること、人から教えてもらったらその人の名前、人に教えたいことなら相手の名前をタグとしてつけることも。後で検索するときに手がかりをたくさんつけておくのがポイント。

 

検索時にブックマークも同時に検索してほしい

検索をしていて、以前に見たページに辿りつけなくなることはよくある。なんとなく見たいサイトをぼやっと覚えているものの、肝心のそこへ辿り着くための検索ワードが思い出せない。 (+_+) そんなとき、Google ブックマークで再検索すると見つかることがある。Google 検索の後、ブックマーク検索するのは面倒なので、検索と同時にブックマークも検索して表示するスクリプトを書くことにした。

動作イメージは下図の通り。検索した単語に応じて、右側にブックマーク検索の結果を表示する。ただし、表示されるブックマークは、Google ブックマークで検索したときの 1 ページ目のみを表示するというシンプルなものに。

091001-003.png

 

インストール

前提 : Greasemonkey がインストールされていること。

インストールはこちらをクリック → search_extention.user.js

更新情報
  • 2011.9.10 : Google Bookmarks からの検索結果が表示されない問題を修正。
  • 2010.11.15 : Google のデザインの変更に対応。ただし、Google の検索結果の幅を固定したので、幅の狭い PC では見ずらくなるかも。
  • 2010.7.31 : Google のデザインの変更に対応。マーカーとして数値を振る。

 

Firefox のブックマークを Google ブックマークへインポート

Google ブックマークを普段使ってない場合は、Google ツールバー を使うと Firefox のブックマークをインポートすることができる。

ツールバーの機能 : ブックマーク - ツールバー ヘルプ によると、

  1. ツールバーの [ログイン] ログインボタンをクリックして、Google アカウントにログインします。
  2. [ブックマーク] ドロップダウン メニューをクリックし、(…) [Firefox ブックマークをインポートする] をクリックします。
  3. インポートしたいブックマークのチェックボックスをオンにします。
  4. [インポート] をクリックします。

ただし、ブックマークを階層化している場合、分類しているフォルダが独立したタグになるのではなく、

フォルダ名1:フォルダ名2

のように `:’ で区切られた文字列で一つのタグになるようなので注意。

 

ソースコードについて

GitHub

当初、Gist – GitHub に置こうと思っていたけれど、なぜか途中で切れてしまったので以下に置いた。

Git の使い方覚えなければ。。 (+_+)

追記 (2010.7.31) : Windows で GitHub の利用 - msysgit, TortoiseGit を使って

 

オブジェクト間の関係

大雑把に言えば、以下の図のような動作。

091005-001

 

スクリプトでは、トップレベルのオブジェクトを名前空間として利用。以下の図では便宜的に名前空間をパッケージとして描いた。

classDiagram2

 

当初、スーパークラスに相当する Abstract 内のオブジェクトは考えていなかった。Google 検索時には Google ブックマークからデータを引っぱてくるだけでよいと。しかし、スクリプトを書いている内に、Google 検索時に はてブ 、Bing 検索時に Delicious から読み込みたいなど、検索サイトとオンラインブックマークの組み合わせを変えたくなるかもしれないと思、共通になりそうな部分を抽出した。必要であればスーパークラスのメソッドをオーバーライドするだけ。しかし、他を実装していないので、実際に書いたときに色々と問題がでてくると思うけれど。。 ^^;

一応想定では、スクリプトの起動部分である最後の文を

searchResultArea({
    searchSite: Google.searchSite(),
    bookmarkService: Hatena.bookmarkService()
}).load();

または、

searchResultArea({
    searchSite: Bing.searchSite(),
    bookmarkService: Delicious.bookmarkService()
}).load();

のように切り替えられるつもり。

 

処理の流れ

大雑把な流れは以下の通り。

sequenceDiagram

 

参考書籍

スクリプトを書くのに以下を参考にした。

JavaScript: The Good Parts ―「良いパーツ」によるベストプラクティス より

4873113911

  • 3.9 グローバル領域の利用を減らす, p28
  • 4.10 クロージャ, p43
  • 5.2 オブジェクト指定子, p57
  • 5.4 関数型, p59

上記の本では、new 演算子を想定している関数に対して、普通に関数呼出しをした場合、グローバル変数を上書きしていしまう可能性があるために、new を JavaScript の「悪いパーツ」と評している。(p133) その代わりとして、クロージャによるメソッドのアクセス制御と継承の方法について解説があった。これを読み、new 演算子の必要性を感じなくなったので、オブジェクトの生成に new は全く使っていない。クロージャは、はじめ取っつきにくかったけれど、慣れたらクラスと同じように見えてきた。クラスベースのオブジェクト指向のように、クラスの構文を持ち込まなくても、関数だけで表現できるのというのはシンプルでいいかも。 ^^

ところで、下記コードにおける searchSite 関数内の defaultInitArea メソッドは、引数 `my’ によって、searchSite 関数 (コンストラクタ) によって生成されたオブジェクトを継承したオブジェクトからのみアセクス可能であることを想定したが、こういう書き方で良かったのかな? JavaScritp に不慣れなので自信なし。。 (+_+)

 

関連記事