【解決済】gitで、あるコミット時のソースコードを、ちらっとlessとかで見たい場合のコマンドって、なにかしら?diffはいらないの。
2013-12-20 15:02 追記
速攻で解決した。インターネット素晴らしい。
@lesamoureuses git show <hash>:<path> ではないですか?
— すぎゃーん (@sugyan) 2013, 12月 20
元記事
という発言があって、twitterで以下のやり取りをしました。
git で、あるコミット時のソースコードを、ちらっと less とかで見たい場合のコマンドって、なにかしら?diff はいらないの。
2013-12-20 11:38:15 via web
@qooh0 git log -p <commit object hash> じゃダメ?
2013-12-20 11:41:33 via Twitter for Mac to @Qooh0
@lesamoureuses これだと diff のある場所しか見えなくて、全体がわかりにくいなぁと。
2013-12-20 11:44:58 via web to @lesamoureuses
@qooh0 あ、違った。いつもgit co <hash> ファイル名、で一旦coしてた
2013-12-20 11:49:36 via Twitter for Mac to @Qooh0
@lesamoureuses はい。それだと、vim がファイルの変更があった!とか反応したりするので、ちらっと見る機能がほしいなぁと…。
2013-12-20 11:52:06 via web to @lesamoureuses
@qooh0 何かこんな感じで自分でalias作るとか。これならgit tmp [hash] [ファイル名]みたいな感じで叩くとviewで開く URL
2013-12-20 14:12:45 via Twitter for Mac to @Qooh0
「確かに一時的にgit coでファイル取り出すことあるけどもっと楽な方法あるのかなぁ?」と探したもののググる力が足りず、最後にgistで書いた以下のような力技になりました。
ただ、適当実装だし、再発明してる感じもするので既にあるなら知りたいところ。
どうすると良いんでしょうか?
他のbranchの内容を調べる時はgit grepしてgit showする
「前に書いたmethodがなくなってるなぁ」
「あぁ、あれ違うbranchで作ったmethodか」
みたいなことを調べる時にタイトルのようにやればいいみたい。
まずはgit grepで違うbranchから探したいものを検索
(git)-[hotfix/2.4.20]-[12:30]% git grep isUniqueWith feature/m48 [/Applications/MAMP/htdocs/lib] feature/m48:app/Model/Enticement.php: 'isUniqueWith' => array( feature/m48:app/Model/Enticement.php: 'rule' => array('isUniqueWith', 'company'), feature/m48:app/Model/Enticement.php: public function isUniqueWith($data, $fields)
CakePHPのcore部分をgit submodule化してgithubで管理する
2011-11-09追記
- app/webroot/test.phpのCAKE_CORE_INCLUDE_PATHを修正することを書いてなかったので追加
- bakeのときにはappディレクトリを指定する必要があることを追加
ここから元記事
CakePHP as a Git submodule | Bravo Kernelの通りやればできる。
重要なのはapp/webroot/index.phpを修正してCAKE_CORE_INCLUDE_PATHのディレクトリを指定することくらい
前提
- CakePHP2.0
- Webサーバのdocrootは以下の通り
~/Sites/docroot/
-
- ここに「git clone https://github.com/cakephp/cakephp.git」でcakephpを落としてきたイメージ。
- なので、このディレクトリ配下にREADMEやappやlibやvendorsやpluginsがある
submodule化の流れ
.gitを削除
[17:53]% rm -fR .git [~/Sites/docroot]
cake本体を削除
[17:54]% rm -fR lib [~/Sites/docroot]
後々考えてgitignoreを作成
[17:55]% touch .gitignore [~/Sites/docroot]
初めのcommit
[17:55]% git init [~/Sites/docroot] Initialized empty Git repository in ~/Sites/docroot/.git/ [17:55]% git add . [~/Sites/docroot] [17:55]% git commit -m 'first commit' [~/Sites/docroot] [master (root-commit) 6083f1c] first commit 436 files changed, 67172 insertions(+), 0 deletions(-) # 以下略
git submoduleでcakeを追加
[17:55]% git submodule add https://github.com/cakephp/cakephp.git [~/Sites/docroot] Cloning into cakephp... remote: Counting objects: 134378, done. remote: Compressing obje # 以下略
submoduleを初期化
[18:05]% git submodule init [~/Sites/docroot] Submodule 'cakephp' () registered for path 'cakephp'
念のためupdate
[18:06]% git submodule update [~/Sites/docroot]
cakephpのgitを切り替えたいので一旦中に入る
[18:06]% cd cakephp [~/Sites/docroot]
ローカルに「2.0.2」というbranchを作り、stableであるCakePHP2.0.2のtagデータをcheckoutする
[18:08]% git checkout -b 2.0.2 refs/tags/2.0.2 [~/Sites/docroot/cakephp] Switched to a new branch '2.0.2'
戻る
[18:09]% cd .. [~/Sites/docroot/cakephp]
CakePHPのCoreのディレクトリを修正しないといけないのでapp/webroot/index.phpとテストをするのでapp/webroot/test.phpを修正する
# vim app/webroot/index.phpでCAKE_CORE_INCLUDE_PATHを以下のように修正 //define('CAKE_CORE_INCLUDE_PATH', ROOT . DS . 'lib'); define('CAKE_CORE_INCLUDE_PATH', ROOT . DS . 'cakephp' . DS . 'lib');
commitするためにgit addする
[18:15]% git add app/webroot/index.php [~/Sites/docroot]
git commit
[18:15]% git commit [~/Sites/docroot]
最後にgit hubにpush
# githubのCodeタブに書いてあることを丸写し [18:17]% git remote add origin うんちゃらかんちゃら [~/Sites/docroot] [18:18]% git push -u origin master [~/Sites/docroot]
できたできたー。簡単。
bakeを使う場合
bakeを使う場合には/webroot/index.phpを通らないのでappのディレクトリを指定する必要がある
[16:43]% ./cakephp/lib/Cake/Console/cake -app app bake [~/Sites/fmn/cakephp]
gitinstawebを試す。リモートリポジトリとローカルリポジトリを作ってみる
gitinstawebだとかgitweb.cgiの存在を全然知らなかったのと、
MacBook内にリモートリポジトリを作ってみてgitの管理をやったことなかったのでちょっと試してみた
参考:Git -
前提
やってみる
初めにベアリポジトリ(要はそのプロジェクトの .git ディレクトリだけで構成されるもののことらしい)を作る
[17:35]% mkdir gittest.git [~/Documents/gitrepos] [17:35]% cd gittest.git [~/Documents/gitrepos] [17:35]% git --bare init [~/Documents/gitrepos/gittest.git] Initialized empty Git repository in /Users/no-kumagai/Documents/gitrepos/gittest.git/
- 慣例により、ベアリポジトリのディレクトリ名の最後は .git とするらしい(Git - サーバー用の Git の取得)
この状態でbranchを確認してももちろん何も出ない
[17:35]% git branch -v [~/Documents/gitrepos/gittest.git] [17:43]%
/tmpにgittestというプロジェクトを作り、readmeを作ってみてコミットまでやる
[14:53]% mkdir gittest2 [/tmp] [14:53]% cd gittest [/tmp] [14:53]% git init [/tmp/gittest] Initialized empty Git repository in /private/tmp/gittest/.git/ [14:53]% touch readme [/tmp/gittest] [14:53]% git add readme [/tmp/gittest] [14:53]% git commit -m 'first commit' [/tmp/gittest] [master (root-commit) 263288e] first commit 0 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 readme [14:53]%
(branch情報を見てみるとこんな感じ)
[17:06]% git branch [/tmp/gittest] * master
「git remote add」でリモートリポジトリをgitに教えて上げる。originという名前で登録。
http://progit.org/book/ja/ch4-1.html によると「git remote add local_proj /opt/git/project.git」こんな感じ [17:42]% git remote add origin ~/Documents/gitrepos/gittest.git [/tmp/gittest]
リモートリポジトリにあるリモートブランチのoriginに、さっき作ったローカルブランチであるmasterをpushしてあげる
[17:43]% git push origin master [/tmp/gittest] Counting objects: 3, done. Writing objects: 100% (3/3), 205 bytes, done. Total 3 (delta 0), reused 0 (delta 0) Unpacking objects: 100% (3/3), done. To /Users/no-kumagai/Documents/gitrepos/gittest.git * [new branch] master -> master [17:43]%
(リモートリポジトリであるgittest.gitでbranchを確認してみると確かにローカルブランチの情報が入ったのがわかる)
[17:46]% cd ~/Documents/gitrepos/gittest.git [~/Documents/gitrepos/gittest.git] [17:47]% git branch -v [~/Documents/gitrepos/gittest.git] * master 263288e first commit [17:48]%
最後に「git instaweb」するとgittestの情報が見れる
[17:50]% git instaweb --httpd=webrick [/tmp/gittest]
(止める時は--stop付ける)
[17:50]% git instaweb --httpd=webrick --stop [/tmp/gittest] [17:50]%
わーい、できたできた。
Git - Bookちゃんと読んだことなかったのだけど読みやすくていいなぁ。