gitの勉強会をしてきた #gitbattle

4/20(土)にgitの勉強会をやってました。

イベントのページ

Git天空闘技場 - connpass
http://connpass.com/event/1958/

経緯とか

元々、Gitの内部構造を軸とした勉強会をやってみたくて、↓みたいな事を考えてた。

- 常に無名ブランチで作業(ブランチとか初心者には要らない)
- リポジトリ内部を1コミットごとに調べる
- ブランチ、タグの実体を知る
- リモートの実体を知る
- オブジェクトを理解する
- 初心者向けの勉強会だけど、初心者をgitの深淵に突き落とす

で、3月くらいに[twitter:@skowata]さんと話してたら「じゃあ、やろう」と。
最初は少人数でもいいかなぁと思っていたけど、意外と人が集まったw

ちなみに、天空闘技場の元ネタはHUNTERxHUNTER。
「Gitの基礎をぶつけられて、念能力git力が目覚める」的な。

感想とか

twitterの呟きや参加者の話を聞いた感じだと、コミットグラフを手書きしたり、リポジトリの内部を覘いたりは未経験だったらしく、楽しんでもらえたみたい。
まぁ、普通の勉強会だとそんな事やらないよね(汗

午後で短い時間だったけど、参加者のgit勉強の参考になってれば嬉しいですね。

リリカルハッカソンでDVCS(veracity, fossil)を触ってみた 3 #nanohack

veracityでプロジェクトを作ってみた。

参考ページ

I've installed Veracity. How do I get started using it? - Veracity Q&A http://veracity-scm.com/qa/questions/53/ive-installed-veracity-how-do-i-get-started-using-it

コマンド簡易まとめ

コマンド 説明 エイリアス
vv help command ヘルプを表示
vv init リポジトリを作り、作業ディレクトリを初期化する
vv whoami 現在のユーザを表示・設定する
vv add file-or-folder ファイルを版管理の対象に追加
vv remove file-or-folder ファイルを版管理の対象から削除
vv status 作業ディレクトリの状態を表示する
vv commit 変更をリポジトリにコミットする
vv revert 戻したいファイルのpath 変更を戻す
vv repo list リポジトリの一覧を表示する
vv rename old_name new_name
vv diff 変更差分を表示する
vv history ログを表示する

ちなみに、veracityは[TAB]でコマンドの補完が効いた。

プロジェクトの作成

mkdir lyrical_tokyo
cd lyrical_tokyo
vv init lyrical_tokyo .

ユーザの設定

$ vv whoami --create sinsoku_listy[at]gmail.com

ファイルを追加する

$ touch README
$ vv status
                         Found:    @/README
$ vv add README
1 added

変更をコミットする

$ vv commit -m "add README"
                                                                                                                                                                
	revision:  2:bc67e711d9acbe3e9e7b87fcb79d62828b673d56
	  branch:  master
	     who:  sinsoku_listy[at]gmail.com
	    when:  2013/04/13 17:46:22.955 +0900
	 comment:  add README
	  parent:  1:08fae75af4ed7b230c3d29e34c175649a84a1416

ブラウザで表示する

$ vv serve

こんな感じの画面が表示される。

リリカルハッカソンでDVCS(veracity, fossil)を触ってみた 2 #nanohack

fossil でプロジェクトを作ってみた

参考ページ

Fossil: Fossil Quick Start Guide http://www.fossil-scm.org/fossil/doc/trunk/www/quickstart.wiki

コマンド簡易まとめ

コマンド 説明 エイリアス
fossil help コマンド一覧を表示
fossil help command コマンドのヘルプを表示 fossil command --help
fossil init repository-filename リポジトリの作成 fossil new
fossil open repository-filename ローカルのリポジトリから作業ディレクトリを作成
fossil set editor editor-name コミットログを書くエディタを設定
fossil add file... ファイルを版管理の対象に追加
fossil rm file... ファイルを版管理の対象から削除
fossil ls 版管理されているファイルの一覧を表示
fossil commit ファイルをコミットする
fossil ui web severを起動する fossil server*1
fossil changes 版管理されているファイルの状態(ADDED, EDITED, DELETED)を表示
fossil status 現在のVERSIONの状態を表示
fossil info 現在のVERSIONの詳細な状態を表示
fossil revert file... ファイルの変更を取り消す
fossil diff file... ファイルのdiffを表示
fossil timeline ログを表示する
fossil undo 特定のコマンド*2の操作をundoする fossil redo fossil undo の操作をredoする

ちなみに[TAB]でのコマンドの補完が効かないので、結構不便

新しいリポジトリを作成する

$ mkdir repos
$ fossil init repos/lyrical_tokyo.fossil

リポジトリをcloneして、作業ディレクトリを作成する

$ mkdir lyrical_tokyo
$ cd lyrical_tokyo
$ fossil open ../repos/lyrical_tokyo.fossil

editorを設定する

$ fossil set editor vim

ファイルをコミットする

$ touch README
$ fossil add README
$ fossil commit

ブランザでの表示

$ fossil ui

こんな感じのページが表示できます。

*1:fossil uiの方だと自動でブラウザが開く

*2:update, merge, revert, stash pop, stash apply, stash drop, stash goto

リリカルハッカソンでDVCS(veracity, fossil)を触ってみた 1 #nanohack

fossil の特徴

  • 分散バージョン管理ソフトだけど、チケット管理、wikiも付いてる
  • インストールが簡単
  • autosyncの設定でsvnのようにも使える
  • プロトコルがHTTPなので、portを開けたりしなくても良い
  • リポジトリとしてsqlite3を使っている
  • Web UIはそこそこ
  • GUIのクライアントは無い

veracity の特徴

  • 分散バージョン管理ソフトで、チケット管理、wiki、CIが付いてる
  • バーンダウンチャートが標準で表示される
  • Web UIが奇麗
  • TortoiseのUIあり
  • iPadのアプリあり

試した環境と各DVCSのバージョン

OS: Ubuntu 12.04 64bit
fossil: Linux x86 v1.25
veracity: 2.5.0.11065 [64-bit LINUX]

fossil のインストール

Fossil: Fossil http://www.fossil-scm.org/fossil/doc/trunk/www/index.wiki

  1. 上記のURLのDownloadから自分のOSに対応したファイルをダウンロードする
  2. 解凍して、PATHの通った場所に置く
  3. versionを表示して動作確認する
$ fossil version
This is fossil version 1.25 [d2e07756d9] 2013-02-16 00:04:35 UTC

他OSで試してないですが、たぶん他OSも実行ファイルを置くだけで簡単にインストール出来ると思う

veracity

Veracity - The Next Step in DVCS http://veracity-scm.com/

上記のURLのDownloadsにある"Install on Ubuntu from SourceGear APT Repository"に従ってAPT repositoryを追加する

$ lsb_release -c
Codename:	precise
$ echo "deb http://debian.sourcegear.com/ubuntu precise main" > /etc/apt/sources.list.d/sourcegear.list 
$ echo "deb-src http://debian.sourcegear.com/ubuntu precise main" >> /etc/apt/sources.list.d/sourcegear.list

※ precise の所はUbuntuのバージョンで変わるので、lsb_releaseで確認した値にする

apt-getでインストールする

$ sudo apt-get update
$ sudo apt-get install veracity

verisonを表示して動作確認する

$ vv version
2.5.0.11065 [64-bit LINUX]

他OSで試してないけど、Downloadsインストーラーが置いてあったので、こちらも簡単にインストールできそう

Gitでブランチをロック(変更不可)する

Git v1.8.2のDocumentationgrepしてもそれっぽい記述はないので、正式な機能じゃないと思う。
gitの内部処理を悪用活用した方法なので、内部処理が変わると使えなくなるかも。
使用は自己責任で

masterブランチのロック

これで、masterブランチの変更(commit, resetなど)が出来なくなる。

$ touch .git/refs/heads/master.lock

コミットしようとすると、下記のようなメッセージが表示される

fatal: Unable to create '/home/sinsoku/Projects/sample/git-sample/.git/refs/heads/master.lock': ??????????.

If no other git process is currently running, this probably means a
git process crashed in this repository earlier. Make sure no other git
process is running and remove the file manually to continue.

indexのロック

ついでに、こっちだとindexを変更できなくなるので、addすら出来なくなる。

$ touch .git/index.lock

Gitの歴史を最初から作り直す時に使うコマンド一覧

「今までのログを最初から作り直したい!」って事が時々あるので、その時に使えそうなコマンドをメモっておく。

コマンド

新しい歴史を持つブランチを作成する
$ git checkout --orphan new_branch
indexにaddされた変更を全て取り消す
$ git rm -r --cached .
空のコミットを作る
$ git commit --allow-empty -m "init project"
別のブランチのファイルをローカルに持ってくる
$ git checkout old_branch -- .

このコマンドの実行後、ファイルがaddされた状態になるので注意。

別のブランチのファイルをzipで持ってくる
$ git archive -o old_branch.zip old_branch

何が便利なの?

プロジェクトの初期で、最初に.gitignoreが無くて変なファイルがコミットされてたり、
READMEが無くて('A`)ウボァーって時に使える。