くりーむわーかー

プログラムとか。作ってて ・試しててハマった事など。誰かのお役に立てば幸いかと。 その他、いろいろエトセトラ。。。

git

clocでgitのブランチ間の修正行数とかをカウントする

gitで管理してるリポジトリのコード行数とか色々集計したくなった。

コミットの追加行数とか修正行数は見ればわかるんだけど、

色々集計しようとしたりすると、gitのみだと割と使えない。

なのでclocっていうツールを使ってやる。

って話が割と見るんだけど、結構大変だったのと、clocってgitのリポジトリ集計するとき

だいぶイケてないように思うのでちょっと書いておく。

あ、Windowsでやります。

まず、インストール。現状の最新は1.82。

clocのgithubから

で、ググって出てくるサイトが最初はコッチ

古い方のサイトなので、注意。GitHubのreleaseから取る。

DLしてとりあえず動かそうとすると「unzipが無い」みたいなエラーが出る。

なので、unzipをDL。

unzipの公式

このunzipのインストールが必要ってclocの公式に書いて無いような気がするんだけども。。。

で、clocとunzipともpathを通しておかないとまずいっぽいので、path通す。

そしたら、対象のリポジトリのディレクトリに行って下の感じ。

git rev-list --max-parents=0 HEAD
>> ae5d586ed47385ded893d95c3ac66724e41259c4

cloc --diff ae5d586ed47385ded893d95c3ac66724e41259c4 HEAD

これで集計はされるんですが、割と↓のエラーが出るんでないかと。

fatal: pathspec ''Program.cs'' did not match any files
Failed to create tarfile of files from git. at script/cloc line 4584.

何でこれが出るのか全然分からなくて、ソース見てみたんですが、

gitのリポジトリからやる場合、下記の流れてやってるっぽい。

それぞれのハッシュから変更のあったファイル名を

git ls-tree --name-only

で持ってきて、

git archive

にファイルの一覧を渡してZIPなんかにして、

そのZIPファイルをclocで集計するみたいな動きになってる。

で、どうも比較するハッシュのどっちかに無いファイルがあると、

archiveが失敗してるって事みたい。

ダメじゃん。。。

cloc自体、スター結構ついてるし使ってる人いっぱいいると思うのですが、

どうみてもコレ出来ないんですよ。

どーなんだろ、みんな困ってないのかしら?

cloc自体、生のファイルかZIPとかのアーカイブからじゃないと集計できないって事なのね。

そしたら、自分でgit の zipアーカイブをいい感じに作るしかないですね。

とりあえず、ブランチ間の差分をとるなら下の感じでやれる。

git archive test --output=test.zip

git archive master --output=master.zip

cloc --diff test.zip master.zip

変更されたファイルのみやりたい場合は、なんかスクリプト組むか

プログラム作るしかなさそうですね。。。

VisualStudioで自前サーバのGit(gitbucket)を使う

ソース管理がしたくなったので、VisualStudioから自前サーバのGitを使えるようにした。外部のサービスは使いたくなかったので、Gitはテケトーなサーバで自前で動かす。今回使ったのはgitbucket。サーバOSはWindows2008。

javaで動かすらしいので、JREをインストール。オラクルからダウンロードしてひたすらクリック。途中、変な機能を入れられようとするのでいつも通りチェックはずす。

入れた直後は多分、パスが通ってないので、サーバ再起動する。コマンドプロンプトで「java」って入れて反応なければパス通ってない。

そしたら、gitbucketをダウンロードして適当なとこに置いておく。ダウンロードするのは「gitbucket.war」ってファイル。

とりあえず、動かしてみる。コマンドプロンプトで「gitbucket.war」があるフォルダまで行って、↓のコマンド

java -jar gitbucket.war

あとは「http://localhost:8080/」をブラウザで開いて、起動確認。id/passは両方root。

デフォで8080で動くけど、いろいろ同居させてるので都合悪し。↓でポート変えて再度起動。

java -jar gitbucket.war --port=8008

そしたら、ログインして、空のリポジトリを作る。 01
02

作った後の画面で出てくる↓のURLをコピッとく。 03

そしたらVisualStudio開く。管理したくなったの開いて、ソリューションを右クリ⇒ソース管理に追加 04

TFSとGitどっち使うって聞かれるからGitっていう。そしたら、チームエクスプローラ開いて、とりあえず変更押す。あとはコメントいれてコミット。コメント入れないとコミットさせてくれないいけず。 05

コミットしたら、同期する?ってでるから同期するって言う。 06

リモートリポジトリのURL入れてって言うからさっきコピッておいたURLを入れる。 07

公開押すと、ID/Pass聞いてくるので、root/rootって入れておしまい。あとはcloneでもpushでもご随意に。

ちなみに、URL間違えるようなやんちゃをするとVisualStudioさんは許してくれない。一回しくじると、URLの変更するとこが出てこないのよね・・・。小一時間ほど探したけど見つけられませんでした。誰か教えてください。しょうがないのでそういう場合は設定ファイル直でいじって無かったことにしてもらう。

対象のソリューションのフォルダの中に「.git」ってゆーフォルダができてるので、その中の、「config」ファイルを開いて、↓のremoteってなってるところまるっと消す。 08
これで、URL入力するところが出てくる。

問合せ