ラベル git の投稿を表示しています。 すべての投稿を表示
ラベル git の投稿を表示しています。 すべての投稿を表示

2012年9月16日日曜日

gitに移行するのは、「mercurialの◯◯が嫌いだ!」と言えるようになってからでいいと思うよ

git、使ってますよ。

githubとかgistは使ってるので、どうしても使わざるを得ません。元々はbitbucketで追いかけてたオープンソースがgithubに移行したので仕方なく、でしたが、実際、gistも便利ですしね。

分散バージョン管理、数ありますが、容易度(難易度ではない)で言うと。

bzr? > mercurial >>>>越えられない壁>>>git

いや、実際、判らないですよ。git

出稼ぎ先のスタッフは、mercurialでの運用には、2週間で概ね慣れてくれました。実際簡単です。トータスHGの存在は割り引いて考えるにしても。

小生が使い始めたのはmercurialが0.7まで遡りますが、コマンドライン数回叩いて、納得できましたから。subversionに極力「似せてる」のもポイントですね。 pushは、簡易なデプロイ機能として使えますし、オマケに現地でのパッチをスムーズに吸い上げることが出来る!こりゃ凄い。てなもんでさ。

機能的にはgitでも勿論出来ますが、

問題は、「出来るか否か」ではありません。
「使うことがメリットになるか(厳密には使いこなせるか)どうか」です。
使いこなせない機能は「存在しない」も同じ。

gitの判りにくさの原因の一つは、異なるコンテキストの「省略語の管理」が、表面上同列に扱えてしまうところだと思う。

git push origin remote

とか。せめてこう書いてくれれば解るのですが

git push -b origin -r remote

どこが違うのって?まあそうね。心の準備をさせてよ!ってところでしょうか。

originもremoteも、いずれも暗黙の省略後。「設定した覚え」がないのに使え、って言われてもピンと来ません。 何度か .git/configを手で書き換えたことがあるほどですよ。

まあ要するに、「gitに移行するのは、「mercurialの◯◯が嫌いだ!」と言えるようになってから」でも遅くはありません。

実際、gitのオススメ記事は「mercurialには出来ないけど、gitには出来ます!」的な物言いが多い。気持ちは解ります。小生だって同じ立場ならそうする。でもそれを聞いてもピンと来ません。mercurialに不満がないからね。

最後の、gitの嫌いなところを明記しておきましょう。

git講座のどこを見ても「履歴を綺麗にする」というフレーズが見当たります。「チェンジセットのガベージコレクション」??? 参照してようがいまいが、履歴を削除しちゃいかんだろうと。正直、「仕事」ではやっちゃいかんと思う。どちらが正しいか。という議論をする気は毛頭ありません。これは「正義」の問題なので。オープンソースなら問題ありません。「趣味」だから。※もちろん「趣味」を馬鹿にしてるわけでもない。

2011年11月6日日曜日

独りgitで、foltiaのsvnリポジトリから独りforkする

分散バージョン管理としては、筆者はmercurialが好きですが、やむなくgitを使うことがままあります。githubで公開してますー、なんてプロジェクトはもとより。

svnリポジトリしか公開してないオープンソースを、個人的にイジり倒す場合は、gitの方が有利です。というのは判っていたのですが、未だに馴染みません。概念が高度すぎるような気がします。baseとか。サブコマンドのネーミングセンスも独特です。哲学の領域を感じます。

当面の目的は、foltiaの独りパッチ運用です。残念なことにオリジナルリポジトリがsvnですが、筆者はsubversionはもう辞めたい。触りたくないレベル。やむなくgitの出番です。

まず、svnをcloneします。
git svn clone http://svn.dcc-jpl.com/foltia/trunk svn-git-foltia

筆者が改造して使ってるのは、2011年5月辺りまで遡るので、git checkoutでチェンジセットを合わせた後、幾つかの改造をcommit。
foltia@ubuntu:~/svn-git-foltia/install$ git branch -av
* (no branch) b89dd80 delete from here
  master a50c07b radiko/らじる録音のリトライ機能追加
  remotes/git-svn a50c07b radiko/らじる録音のリトライ機能追加
非gitのリモートリポジトリは、勝手にremotes/*ブランチになるみたいですね。こういう暗黙の了解が多いのが、正直馴染みません。#ブランチに入っちゃうと、そのブランチのチェンジセットログしか参照できないっぽいのも個人的には困ってるのですが。
勝手ブランチが判れば、マージは出来ます。gitのマージはcommitまで含んでしまうようですね。
git checkout --force remotes/git-svn ; git merge b89dd80

今回は、独りforkにブランチ名を付けてなかったので、鈍くさい仕上がりですが、目的は果たせました。