CodingFirst

C言語、Perl、JavaScript、最近はPythonも。出来上がったものより、プログラムを書くことが好き。あと、スイーツ。

スポンサーサイト

  • このエントリーをはてなブックマークに追加
  • web拍手 by FC2
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

gitでファイル一覧を見る方法

  • このエントリーをはてなブックマークに追加
  • web拍手 by FC2

コマンドラインで git管理されたファイルをどうやってみるの?
というのを調べて、便利なaliasを作った。

gitkとか、TortoiseGitを使えば良いのだけど、
コマンドラインでさくっと見たいときに便利だし、
加工しやすいしね。

svnでいうと、'svn ls'とか'svn status -v'とかのイメージ。
gitだと、ls-files があるので、試してみる。
ちなみにリポジトリは git のソースコード。

$ git ls-files
.gitattributes
.gitignore
.mailmap
COPYING
Documentation/.gitattributes
Documentation/.gitignore
Documentation/CodingGuidelines
Documentation/Makefile
Documentation/RelNotes/1.5.0.1.txt
Documentation/RelNotes/1.5.0.2.txt

...(中略)

xdiff/xinclude.h
xdiff/xmacros.h
xdiff/xmerge.c
xdiff/xpatience.c
xdiff/xprepare.c
xdiff/xprepare.h
xdiff/xtypes.h
xdiff/xutils.c
xdiff/xutils.h
zlib.c

とりあえず出てくるのはいいけど、
下位のディレクトリのファイルがわんさかでてきてしまう。
下位のディレクトリはいらないな...
対応するオプションが無いので、自前で加工。

$ git ls-files|perl -pe 's/\/.*/\//'|uniq
.gitattributes
.gitignore
.mailmap
COPYING
Documentation/
GIT-VERSION-GEN
INSTALL
Makefile
README
RelNotes

...(中略)

wrap-for-bin.sh
wrapper.c
write_or_die.c
ws.c
wt-status.c
wt-status.h
xdiff-interface.c
xdiff-interface.h
xdiff/
zlib.c

ls -F 風で満足。こういうのは aliasしとこう!

$ git config --global alias.ls '!'"git ls-files -t|perl -pe 's/\/.*/\//'|uniq -c"
$ git config --global alias.ll '!'"git ls-files -cdmokt|perl -pe 's/\/.*/\//'|grep -v '/'"
$ git config --global alias.la "ls-files -cdmokt"

ついでにいろいろやってみた。

  • git ls : カレントディレクトリのgit管理されたファイル一覧で、 サブディレクトリのファイル数のおまけ付き。
  • git ll : ファイルを状態付きで一覧。
  • git la : サブディレクト含めて全ファイルを出すとき。

こんだけあればいいだろう~。

ls-filesのオプションの-dmoktは、

  • -dmok : カレントディレクトリの全ファイル
  • -tが状態を表示する。状態は、
    • H : cached
    • S : skip-worktree
    • M : unmerged
    • R : removed/deleted
    • C : modified/changed
    • K : to be killed
    • ? : other
$ touch aaa # added other file
$ git ls |head
      1 H .gitattributes
      1 H .gitignore
      1 H .mailmap
      1 H COPYING
    374 H Documentation/
      1 H GIT-VERSION-GEN
      1 H INSTALL
      1 H Makefile
      1 H README
      1 H RelNotes

$ git ll |head
? aaa
H .gitattributes
H .gitignore
H .mailmap
H COPYING
H GIT-VERSION-GEN
H INSTALL
H Makefile
H README
H RelNotes

$ git la |head
? aaa
H .gitattributes
H .gitignore
H .mailmap
H COPYING
H Documentation/.gitattributes
H Documentation/.gitignore
H Documentation/CodingGuidelines
H Documentation/Makefile
H Documentation/RelNotes/1.5.0.1.txt

満足、満足。

おまけ:
git本は、Gitメンテナ著作の「入門Git」がオススメ。


入門Git入門Git
(2009/09/19)
濱野 純(Junio C Hamano)

商品詳細を見る
Gitメンテナ著作。Gitの使い方だけでなく、オープンソースをソースコード共有という視点での話はなかなか興味深い。

あと、たまにはこの手のコマンド一覧をざざっと眺めておくと、
git la とかで出力したテキストの加工をさらっとできて、
にんまりできる。


【改訂新版】 Linuxコマンド ポケットリファレンス (Pocket Reference)【改訂新版】 Linuxコマンド ポケットリファレンス (Pocket Reference)
(2009/04/08)
沓名 亮典、平山 智恵 他

商品詳細を見る
スポンサーサイト

Pro GitのMarkdownをHTMLで1ファイル化した。pandocは使わない方向で。

  • このエントリーをはてなブックマークに追加
  • web拍手 by FC2

Pro Gitという英語の書籍があるけど、ドキュメントがWebページで公開されていて、日本語訳も全部ではないもののある。

これを印刷して読もうかなと思ったんだけど、たくさんページがあるので wgetあたりでざっくり拾って印刷...と思ったけど、たぶん余白がたくさんでてしまう。

ところで、Pro Gitは GitHubでも公開されていて、翻訳を有志の方ベースで進行しているみたい。

ドキュメントは Markdown で書かれているので印刷はしやすそう。でも図をインライン展開できない。makepdfというスクリプトで Markdown->TeX->PDF する手が用意されてるけど、使用する pandocとxelatexはインストールがめんどくさそう...という人向けに

で PDFが公開されてた。あ、これいいな...と思ったんだけど、なんとなく自分で Markdown→html、更に 1ファイルに繋げてみたいなと思ったのでやってみた。

$ git clone --depth=0 git://github.com/progit/progit.git progit
$ cd progit
$ mkdir tmp
$ cp -r en/* tmp/
$ cp -fr ja/* tmp/
$ cat tmp/*/* | perl -ne 'use Text::Markdown markdown; s/Insert\s+(\w+)\.png/![$1.png](figures\/$1-tn.png)/g; print markdown($_);' > hoge.html

TeX化、PDF化もできそうだけど、個人的に読む分にはこれで十分じゃないかな。加工もしやすいし。


入門Git入門Git
(2009/09/19)
濱野 純(Junio C Hamano)

商品詳細を見る

git logで、gitk --all くらい情報ほしい

  • このエントリーをはてなブックマークに追加
  • web拍手 by FC2

git log でリビジョンのツリーと、branchの情報が欲しいなーと。

やっとできた。。

git log --graph --all --color --pretty='%x09%h %cn%x09%s %Cred%d'

--graph: ツリー表示が付く
--all: 全てのログ。カレントのブランチだけに限らず。
--color: 色
--pretty: ログのフォーマット。%dが branch。

早速、alias 登録。

git config --global alias.log-all "log --graph --all --color --pretty='%x09%h %cn%x09%s %Cred%d%Creset'"

こんな感じ。

$ git log-all
*       99255c5 yukiocc  modify to first commit  (master)
| *     e802d11 yukiocc  issue-xxx: add xxx function.  (issue-xxx)
|/  
*       abfdaec yukiocc  first commit

issue-xxxは、rebaseしてから masterにマージしよう...という感じかな?

gitk --all だと別ウィンドウになってしまうけど、これならパッと確認できていい感じ。これで git コマンドだけで満足できるようになったかも。

(9/25 加筆)

'--prety'の最後に%Cresetを追加。環境によっては赤が次行に続いてしまうため。

(9/29 変更)

'--prety'で表示するハッシュをparent(%p)でなく、コミット(%h)に変更


入門Git入門Git
(2009/09/19)
濱野 純(Junio C Hamano)

商品詳細を見る

リポジトリはsvn、クライアントはgitを使う

  • このエントリーをはてなブックマークに追加
  • web拍手 by FC2

サーバのリポジトリを svn として、git で開発を進められるかを試用してみた。なので、思いっきり git っぽく行うより、svn の使用感を残しつつ git を使う感じで進める。

git は Windows環境が整ってからと思ってて、まだ日本語ファイルに弱い気がするけど、msysgitとTortoiseGit の併用で使用に耐えるなと思ったので git を使おうかなと思い始めた。


まず、チェックアウト。svn っぽい考えとしては、HEADリビジョンのチェックアウトで十分だろう。

git svn init http://path/to/svn/trunk/prj
git svn fetch -rHEAD

ここで svn ではコーディグ開始となるが、今回 git なので、branch してからコーディングしようと思う。なぜなら、svnでは branch はコストが高くて極力避けていたが git では branch した方がコストが下がると期待してるから。

さて、コーディングする内容を issue-XXX とした場合、

git checkout -b issue-XXX

とすると branch を作成しつつチェックアウトする。この場合、masterと同一なので何もソースコードに変更はないけども。

~~~ ここでソースコードをバリバリ書く。~~~

書いたらコミットする。

ファイルを追加するときは git add しておく。

git commit -a

このコミットはローカルの gitリポジトリにコミットするだけなので、サーバのsvnへは影響しない。

というわけで、サーバの svn にコミットする。前準備として svnの最新版と同期をとるが、コミットは本線の master で行うので、戻っておく。

git checkout master
git svn fetch

svn側での変更差分を master, issue-XXX にマージする。

git rebase git-svn
git rebase git-svn issue-XXX
git rebase issue-XXX

うーん。rebase が多くでめんどくさい。。。

issue-XXX に branch したからなので、master でだけ作業すりゃ手間は増えないじゃんと思う。でも、複数のissueを平行して行う場合、ついついゴチャマゼにコーディングして、AAAはできたけどBBBが不十分でコミットできない...というのがすごいストレスだったので、この手間はかけるべきなんだろう。

確かに svnでもフォルダをわけて個別に checkout すればできたけど遅くてやる気にならなかった。これは svnだけの問題でなく http とかいろいろあるけども。

話を戻すと、複数のissueがあれば rebase を使って master にマージすべき。merge コマンドを使うときっと、Merged .. とかいう要らないログが増えてちょっと恥ずかしくなる。

(もし、そうなったら git commit --amend)

svn にコミットする。

git svn dcommit

これでおしまい。だけど、このコミットは svn commit よりやたら時間がかかる気がする。こればっかりは我慢するしかないのか。。。

ちなみに慣れるまで、1コマンド毎くらいに

gitk --all 

とかで、全体のリビジョンとbranchのツリーを一手ずつ確認しながら進めると、理解しやすいかと思う。


入門Git入門Git
(2009/09/19)
濱野 純(Junio C Hamano)

商品詳細を見る

Macで Trac+git の環境構築

  • このエントリーをはてなブックマークに追加
  • web拍手 by FC2

最近、趣味プロするときは git を使ってみていて、メモ代わりに trac も繋げてみようかなと。

キーワードはこんな感じだった気がする。

  • python2.5
  • trac0.11.2.1
  • easy_install
  • X-MAC-JAPANESE

素のpythonが古そうだったのでてきとうに 2.5 に差し替えてみる

$ python
Python 2.3.5 (#1, Nov 26 2007, 09:16:55) 
[GCC 4.0.1 (Apple Computer, Inc. build 5363) (+4864187)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> ^D

$ sudo port install python2.5
$ sudo sudo ln -s /opt/local/bin/python2.5 /opt/local/bin/python
$ sudo port install py25-setuptools

tracと GitPlugin のインストール

$ sudo easy_install-2.5 trac
..
Installed /opt/local/lib/python2.5/site-packages/Genshi-0.5.1-py2.5-macosx-10.3-i386.egg
Finished processing dependencies for trac
$ sudo easy_install-2.5 http://trac-hacks.org/svn/gitplugin/0.11/

リポジトリ用のディレクトリを掘って、git-clone。そうそう。Apache(httpd)は使わないつもり

$ mkdir -p ~/Repos/trac/gitrepo/
$ mkdir -p ~/Repos/git/gitrepo/
$ cd ~/Repos/git/gitrepo/
$ git clone --bare ~/using-repo gitrepo

gitは使ってたリポジトリから cloneした。そういえば、using-repo -> gitrepo に push できるのかな(?)

やりたくなったら調べよう。gitrepo の直下は .gitの中身相当が入る。

次に trac リポジトリ。

一人用でアクセス制限なしなので、anonymousに必要に応じて権限を足す方向で。あと、sqliteがどうのとエラーが出たので sqlite をてきとうにアップデートして rehashと思ったが bashに無かったので、途中でシェルを立ち上げなおしたりしてる。

$ sudo port install py25-sqlite3
$ trac-admin ~/Repos/trac/gitrepo/
Welcome to trac-admin 0.11.2.1
Interactive Trac administration console.
Copyright (c) 2003-2008 Edgewall Software

Type:  '?' or 'help' for help on commands.
        
Trac [/Users/user1/Repos/trac/gitrepo]> initenv
Creating a new Trac environment at /Users/user1/Repos/trac/gitrepo
...
Repository type [svn]> 
...
Path to repository [/path/to/repos]> /Users/user1/Repos/git/gitrepo
...
Congratulations!

Trac [/Users/user1/Repos/trac/gitrepo]> permission add anonymous TRAC_ADMIN CONFIG_VIEW
Trac [/Users/user1/Repos/trac/gitrepo]> quit

なーんか trac-admin がエラー出る。文字コードっぽいのと、readlinkっぽいのが。上記の通りならエラーでずに使えるのでよしとする。

conf/trac.ini の設定変更は下記くらいだったはず

+ [components]
+ tracext.git.* = enabled

  [git]
- git_bin = git
+ git_bin = /opt/local/bin/git

で、早速 tracd を立ち上げると

LookupError: unknown encoding: X-MAC-JAPANESE

とか出る。先人の知恵をいろいろ探してみたところ、2.5だけどうも問題がある様子。下のどちらかで対策するものが多かった。

  • python2.5 のソースにパッチ
  • trac のエラーが出た付近にパッチ

パッチはあてない方がいいなぁーとてきとうに試した。

ちらっとLANGがどうのとあったので試したけどLANGは無視してそうなのがわかって、あと sudo したときに環境がどう引き継がれるかが問題な気がするもののよく調べず、そういや LC_ALLはどうだろ試したら...うまくいった。

$ LC_ALL=ja_JP sudo tracd -p 8080 `pwd` 

ポートは /etc/services を見ると httpd が予約だけど使ってないからよし(笑)

無事、http://localhost:8080/gitrepo で、tracにアクセスできたー。

まだ、ソースに書いた日本語が化けてるけど、疲れたのでしまい。しまい。


入門Trac第2版―Linux/Windows対応入門Trac第2版―Linux/Windows対応
(2009/08)
高山 恭介

商品詳細を見る

 | HOME | 

Search

Recent Entries

Foot Print



Categories

Monthly

Recent Comments

Recent Trackbacks

Profile

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。