2011-02-28

gitでトラブル

Gitに限らず、しくみを理解していないとVCSでは取り返しのつかないことになる可能性があり・・・

Git で no branch に commit した時の対処法

SubversionのときはTortoiseSVNが神がかっていてあんまりトラブルもなかったが、そろそろそういうのにも卒業せねばというのと、Win->MacBookに乗り換えたため

2011-02-23

group by と having

groupIdがあるテーブルがあって、groupIdが3以上のところを調べたいというとき
select groupId, count(groupId) from grouptable group by groupId having count(groupId) >= 3
要はgroup by と havingくらい覚えとけよこの (゚Д゚)カス!!
ってことでしたおわり。

2011-02-15

git-svnを使った開発中によく使うコマンド

  1. ローカルに未コミットの変更があるけどgit-svn-dcommitしたい
  2. リンクと同じことしか書いてないけど、ぐぐったりブクマしたりすると大変なことになるので自分メモ。 会社のwikiに書いてもいいかもだけど、もうちょっとまとめたほうがいいかなということでwww上に公開するとかよくわからないことをしている。
    $ git stash
    $ git svn dcommit
    $ git stash apply
    
  3. branch/tagsにtrunkコミットの一部をマージしたい
  4. こことかを参照した。 普通に"git svn branch"でぐぐれば山ほど出てくるのでエントリ化する必要もなさそうなのだけど。
    1. git checkoutでsvnのbranch(tags)を引っ張る
    2. masterにcheckoutでもどって、コミットログを確認、cherry-pickしたいcommitNoをコピー
    3. branch(tags)に戻り、git cherry-pick
    4. logを確認
    5. git svn dcommitでsvnのbranch(tags)にコミットする
    コマンドは以下。
    $ git checkout -b hoge tags/20110411
    Switched to a new branch "hoge"
    $ git cherry-pick fuga
    ~cherry-pickのmessage~
    $ git svn dcommit
    
    ※fuga=commit No

2011-02-13

git rebase

GitブログかよというくらいGitのことしか書いていない気がするけど気にすんな (´ー`)シラネーヨ

入門Gitの176ページに競合とかについても書いてあるのだが一応メモ。
競合については本で書いてあることをそのまま書いただけで、まだ試してない。
rebaseが何かかとか以下のコマンドがなにをしているかを書いてあるページはごまんと出てくるであろうので割愛。
git checkout branch
git rebase master
or
git rebase master branch
競合が見つかるとrebaseは一時停止し、競合の解決が可能になります。
競合をすべて解決し、解決結果でインデックスを更新したら
git rebase --continue
でrebaseを再開する。

ここに書くよりman git-rebaseを見た方がいろいろ便利かもしれない。

2011-02-05

git svnに関する悩み

git一本に切り替えるかgit-svnで開発を行うか迷っている。
git-svnにバグや面倒な操作がなければgit-svn環境で問題ないのだが、そもそもgitをまだ理解しきれていないのでgit-svnがよう分からず、困っている。
$ git svn rebase
が使えればたぶんだいたい問題ないのだが、(なぜなら、gitを使用するのはプログラマだけで、svnを使用するのはブランチ開発などを行わないクリエイターが主になる予定であるため)
fatal: ambiguous argument 'HEAD': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions
log --no-color --no-decorate --first-parent --pretty=medium HEAD: command returned error: 128
とか言われてrebaseできない。
なんかgit branche -aでいっぱいブランチがでてくるのが問題かなとか思ってるんだけど、予想であって根拠は無い。gitをきちんと理解していればこんなことにはならないのに。
(追記)
git svn clone -s https://hoge.com/fuga/svn
とcloneしたらなんかgit svn rebaseできて大丈夫だった。
git svn clone -T trunk(以下略)
という感じでいちいちトランクやブランチを指定していた形でcloneしていたときは失敗してた。
何で解決したかは予測でしかつけられない(面倒くさい)ため略。
man git-svnがいいんじゃないかなと思います。
あ、あと結局暫くgit-svn開発でいくことになりました。
(追記終わり)

また、
$ git svn fetch
$ git merge trunk
ならsvnのcommitを引っ張ってくることはできた。

2011-02-04

gitを使った開発中によく使うコマンド

まだあんま使ってないのだけど、多分これらは有用である

branchでがががと開発しているときmasterの様子が気になる!
git show origin/master:filename

tags切っちゃったあとに修正忘れを発見!!でもだいぶコミット進んじゃって、いらないものもあるよ〜。だから、あるコミットだけマージしたいの!!
git cherry-pick commit-id

随時追加予定です。

2011-02-03

gitのリポジトリ作成メモ

remote.origin.url=ssh://matsumushico@hoge.com/srv/repos/git/mushico
とすべきところを
remote.origin.url=ssh://hoge.com/srv/repos/git/mushico
とかしてて、しかもそのミスが今回で2回目であり。

Permission denied (publickey).
fatal: The remote end hung up unexpectedly
と言われまくった。
備忘録しておかないとまたやりそう。

wikiに
ssh://matsumushico.com/srv/repos/git/mushico
とかってメモってあるから間違えるorz


ぜんぜん情報は足りてないけど備忘録として何度も参考にさせていただいているサイト
せっかちな人のためのgit入門


ちなみにgitじゃなくて正確にはGitらしいです。