nDiki : CVS

Concurrent Version System CVS

過去ソフトウェアの共同開発などで良く使われていたバージョン管理システム。 複数のファイルのリビジョン(バージョン)を管理できる。 ちょっとした1つのファイルのリビジョン管理には RCS が便利。

メモ

タグ

作業ディレクトリ中の src ディレクトリ以下にタグ付け。

 cvs tag -c release-1-0-0 src

作業ディレクトリ中の src ディレクトリ以下の間違えてつけてしまったタグを削除。

 cvs tag -d release-1-0-0 src

ログメッセージの修正

 cvs admin -mREV:MSG files

undo

指定したリビジョンを消す(危険)。

 cvs admin -oREV file

2007年1月6日 (土)

connect.c を使って SOCKS サーバ経由で社内サーバへ SSH 接続

以前社外から社内 Web サイトへのアクセスは autossh + FoxyProxy を使って SOCKS 経由で直接できるように設定した (記事)。 また UnisonSubversion もそれぞれ SSH port forwarding 経由で直接アクセスできるようにしてある (Unison の記事Subversion の記事)。

しかし社外から社内サーバへの SSH 接続(やファイル転送)は、以前として一旦中継ホストに接続(転送)してから再度接続(転送)していて面倒であった。

調べたところ Shun-ichi GOTO氏の SSH プロキシコマンド connect.c を使うと SOCKS サーバ経由で直接接続できるようなので設定してみた。

 [クライアント:8090] -- SOCKS -- [ゲートウェイ] -- [社内サーバ]
                                 gw.example.com    192.168.1.x

インストール

Debian なので apt-get で。

 apt-get install connect-proxy

SSH の設定

~/.ssh/config に以下の行を追加。

 Host 192.168.1.*
   ProxyCommand /usr/bin/connect-proxy -S localhost:8090 %h %p

192.168.1.* に接続する際は、connect-proxy を使ってローカルホストの 8090 ポートの SOCKS を通るようにする設定。

SSHSOCKS サーバにする

autossh を使って SSHSOCKS サーバを立てる

 autossh -N -f -D8090 gw.example.com

これで準備 OK。

使ってみる

SSH 接続
 ssh 192.168.1.x

で接続を確認。

Konqueror (KDE)
 fish://192.168.1.x/

で直接ブラウズ、読み書き可能なことを確認。

Unison

普通に 192.168.1.x と同期できることを確認。

CVS

普通に 192.168.1.x 上のリポジトリに対して cvs update できることを確認

Subversion

普通に 192.168.1.x 上のリポジトリに対して svn update をかけるとアップデートし終わって最後に

 FATAL: output (local) failed, errno=32

というエラーがでる。

便利

Subversion だけちょっと気がかりだれど、その他はうまく行っている感じ。

これでかなり手軽に接続、転送できるようになった。 便利、便利。

追記 (2009年2月23日)

一時的に connect.c を通らないで直接接続する際には 'ssh -o ProxyCommand=none' とする。

 例:
 SVN_SSH='ssh -o ProxyCommand=none' svn update
[ 1月6日全て ]

2010年9月13日 (月)

今日のさえずり: FRISK ピンクグレープフルーツか

フリスクオレンジミント

  • 09:58 缶コーヒー 100円。
  • 12:08 鷄そぼろ弁当とお茶 501円。
  • 12:10 セブン-イレブンの弁当の「横からも切ることができます。」テープ、以前より改良されたな。前のはボロボロになって手について酷かった。
  • 12:52 2008年にちょっと改変したまま放置していたコードをコミット。CVS 触るの久しぶり。
  • 13:00 RT @fwafwa_: 定食屋で「このうどんセットください」って店員に言ったら、「うどんですね!?そばもありますがうどんでよろしいですね!?」って何回も聞かれたから内心(そんなに確認しなくてもいいのに…)って思ったけど、数分後にそばセット出てきたからもっと確認しろよと思った。
  • 13:17 「ウィンドウが画面の端に移動されたときに自動的に整列されないようにします」をチェック。これでイラッとが減る。
  • 14:13 ミーティング開始3分前に延期のメールを送信してもらっても、出席準備満々でもうメールなんて見てない。 Gmail の poll サイクル的にも受信できてないし。
  • 15:29 Xperia ここ最近調子悪い。今もシャットダウン終了できなくて電池外した。
  • 18:49 キリがいいので今日は上がり。
  • 19:19 夜アトレ。
  • 19:22 FRISK ピンクグレープフルーツか。気になる、気になる。
  • 19:54 うわ、外蒸すなあ。こっちも雨来るのかな。
  • 21:20 熱海の捜査官の公式サイト見てる。用語辞典と南熱海の地図がいいね。
  • 22:34 テレビどれにしようかな。 REGZA なら 37V型の 37ZS1 かなあ。 http://amzn.to/cwe4lQ
  • 23:04 風呂入っている間に雨。涼しくなるかな。
[ 9月13日全て ]

2010年11月19日 (金)

Git でローカルリポジトリの連続するコミットをまとめてから push したい時

分散型バージョン管理システムである Git では SubversionCVSVisual SourceSafe などと違って気軽にローカルリポジトリにコミットしていって、最終的に形になったところで公開/共用リポジトリに push するといったことができる。

こまめにローカルリポジトリにコミットしながら作業していくことで、いつでも後戻りしてやり直したり変更点を確認したりできる。ただちょっとした変更の連続によるたくさんのコミットを公開/共用リポジトリにそのまま push したくない。そういう場合は意味のある単位にコミットをまとめてから push したい。

Git では git-rebase でこれができる。

最新のコミット(HEAD)と1つ前のコミット(HEAD^ / HEAD~1)をひとつにまとめて HEAD~2 の次のコミットにしたい時

 A---B---C---D---E
         |   |   |
         |   |   HEAD
         |   HEAD^
         HEAD~2

最初に git rebase する。

  git rebase -i HEAD~2

すると

  pick <HEAD~1のハッシュ> <HEAD~1 のログ>
  pick <HEADのハッシュ> <HEAD のログ>

という行を含む内容でエディタが起動する。HEAD を HEAD~1 にまとめたいので 2番目の pick を squash に書き換えエディタを閉じる。

すぐにまた今度はコミットログ修正のためのエディタが開く。HEAD~1 のコミットログと HEAD のコミットログがあらかじめ含まれているので、それらを編集して2つ分の内容を反映したものに書き換えエディタを閉じる。

これで直近の2つのコミットがまとめられて新しい1つのコミットになる。

 A---B---C---F

ローカルでの試行錯誤をとりまとめて整理されたコミットになったのでここで push する。

  git push

なお squash を使えばできるというヒントは @tokuhirom 氏に教えていただきました。ありがとうございます。

[ 11月19日全て ]

2010年12月20日 (月)

今日のさえずり: 生まれて初めて10円券20枚を行使した

2010年12月20日

  • 10:12 DropboxPortable って開発停止なのか。今の 0.7.110 の状態で使い続けるか迷うところ。 #Dropbox
  • 11:07 週次グループミーティングアジェンダに、いつも「その他」があるのが気になる。
  • 12:09 生まれて初めて10円券20枚を行使した。 (@ 向日葵 和泉町店・カレー食堂) http://4sq.com/gmh7J4
  • 12:16 「またいっぱい貯めてくださいね(ハート)」※注「ささやかな気持ちDESスクラッチ」は350円弁当にはつきません。
  • 12:51 RT @tuiteru: これは楽だ。 nDiki: Gmail 無しの Google アカウントGoogle Contact Manager が使えるようになった http://t.co/rLec9Rt via @Naney
  • 13:22 まだ食後だけど、もう我慢ならなくてお土産にもらった萩の月を食す。
  • 13:26 Subversion / CVS の時は何か面倒な気がしてまずブランチしなかったんだけれど、Git だとホイホイだなあ。
  • 15:13 なんか「後で感想を聞きにくるコーヒー」をいただいた。
  • 15:31 普通かな。香りはあまりしない。味はあまり苦くないマイルド系。 RT @Naney: なんか「後で感想を聞きにくるコーヒー」をいただいた。
  • 19:27 charset を間違えたコミットメッセージの修正で git rebase -i しようとしてはまった。コマンド-ログ行の並びが上ほど古いのを逆と勘違い(メッセージが化けてたこともあって)。何度も違う方を修正しようとしてしまった。
  • 21:13 モバツイ Who's Who!? http://bit.ly/gwqsEY
  • 21:25 モバツイ Who's Who!? ってマイリストに登録する時にメモがつけられるんだ。Twitter に欲しいと思っていたのでいいかも。20文字はちょっと少なめかな。 http://bit.ly/gwqsEY
  • 21:28 モバツイ Who's Who!? でもまだちょっと不安定。プロフィールも出たり出なかったりする。 http://bit.ly/gwqsEY
  • 22:10 うちの会社のサイト、郵便番号が書いてないな。
  • 22:37 LinkedIn ってどんなものかなと思って登録してみた。 http://linkd.in/f9Iri0
  • 22:39 LinkedIn にも Like が。
  • 22:41 @Keiichi_SHIGA 言語別にプロフィール作れるんですね。でも名姓順になるからちょっとイケてない。
  • 23:38 about.me もアカウント作ってみた。 http://bit.ly/ggLun1
[ 12月20日全て ]

2013年1月1日 (火)

今日のさえずり: 今日も目が開いた! 生きてる! めでたい!

2013年01月01日

  • 08:20 今日も目が開いた! 生きてる! めでたい!
  • 08:46 元旦の富士山見えた!
  • 11:32 新春なのでmixiプレミアム登録した。
  • 11:42 OpenID: https://id.mixi.jp/naney
  • 15:23 初詣行ってきた。腕パンパン。
  • 18:53 そういえば、今年も例年通り1月1日の記念写真撮った。もう10年以上続いてる。
  • 23:45 冬休み中に CVS から Git に移行したい。
  • 23:57 RT @sseze: 大晦日に1年を振り返っていて思ったけど、Twitterだと書いたことをチェックする機会がなくて、言いっ放しになっていることがとても多い。 ポモドーロでも何でもいいから、その日にやったことのログを残したいと思った。https://www.naney.org/... … @Naneyさんから
[ 1月1日全て ]

2013年1月4日 (金)

CVS リポジトリGit リポジトリに cvs2git で移す

しばらく放置していたこの nDiki のコード(DiKicker)に手を入れようと思うのだけれど、CVS で管理し続けるのもなぁと思い、これを機会に Git に移行させることにした。移行は cvs2git で。ローカルで自分だけでバージョン管理していたものだし、ブランチも切ってなくてタグを売ってあるだけなので一番ちょろいケースか。

Debian GNU/Linux sid 上に cvs2svn Debian パッケージをインストール。以下の手順でコンバートした。

オプションファイルを作る

Git リポジトリ上できちんとユーザ名とメールアドレスが入るようにしたいため、オプションファイルを使うようにする。

 zcat /usr/share/doc/cvs2svn/examples/cvs2git-example.options.gz > cvs2git.options

でひな型をコピーして以下を書き換え。

  • ctx.username = 'cvs2svn' のところを naney に。
  • author_transforms に 'naney' : ('WATANABE Yoshimasa', 'naney@naney.org'), を追加
  • run_options.set_project で CVS リポジトリのパスを r'/home/naney/path/to/cvsroot', のように指定。

git fast-import 用のファイルを生成

以下のコマンドで。

 cvs2git --options=cvs2git.options

Git リポジトリを作成しインポート

 mkdir <プロジェクト名>
 cd <プロジェクト名>
 git init
 cat ../cvs2svn-tmp/git-blob.dat ../cvs2svn-tmp/git-dump.dat | git fast-import

で QGit や git log などで、どのようにインポートされたかを確認。trunk のラインから、タグ毎に分岐したコミットができてそこに CVSROOT/ 以下が差分として入っているという形になっているのが特徴的。CVSROOT/ は特にいらないので、数が多くないし手でタグ打ち直すかなあという感じ。

git fast-import したままだと作業ツリーが空なので git checkout して master を checkout するなりすれば、後は普通に Git 上でバージョン管理をしていくことができる。

あっさり移行できたので一安心。

今日のさえずり: 年賀状サービスは後日でいいので PDF ファイルも送って欲しい

2013年01月04日

  • 10:44 昨日の IKEA での配送手続き、サービスオーダーの紙みたら住所が転記ミスされていたので電話で修正。
  • 12:03 粛々といただいた年賀状をスキャン。はっ、年賀状サービスは後日でいいので PDF ファイルも送って欲しい。
  • 12:45 三が日明けたので社内報読んでます。
  • 22:13 ぼちぼち CVS リポジトリGit リポジトリ移行やるか。まずは cvs2svn Debian パッケージをインストール。
  • 22:22 CVS の記憶の糸を辿りながら cvs コマンド叩いてる。もはや commit 前に add しないのとかキモー。
[ 1月4日全て ]

2013年8月9日 (金)

今日のさえずり: 会社の近くのローソンでキュアエースのスタンプを押すというミッションが与えられた

[ 8月9日全て ]

2014年2月19日 (水)

いよいよ WiKicker から WikiEngine のコードを抜いて DiKicker のみにする

2002年10月19日から開発を始めてしばらく公開・運用をしていた WikiEngine だけれど最近は WikiEngine そのものは使っていなくて、今はそのコードをベースに作った日記システムDiKicker 部分しか使っていない。DiKicker の方は自分自身で今後も使っていくんだけれど、さすがにいろいろ古いのでそろそろ大改修しようかなと。基盤部分的には

  • Perl 5.005_03Perl 5.6 系との互換処理を捨てる。
  • 文字列処理をバイナリ文字列ベースから(いわゆる UTF8 フラグ界隈的な)テキスト文字列ベースにする。
  • CGI.pm ベースから PSGI ベースへ移行する。
  • 中間管理用のストレージを Berkeley DB から SQLite にする。

などをして今後も使っていけるようにしたい。既に使っていないアプリケーションとしての WikiEngine 部分は移行させていく手間をかける必要はないと思うので、コードを削除していくことにした。WikiForum 立てるなら既にいろいろ他の選択肢があるしね。

CVS での管理もやめて Git 管理に変更。最後の公開 tarball を展開して git init して最初のコミットとし、その後に変更した作業ディレクトリを Git 側の作業ツリーに上乗せしていったんコミット。あらためて最後の公開コードの上に差分を積んでいくつもり。

今日のさえずり: 風呂入って出てきたら、シェル上では perlbrew で別の Perl が動いているのを思い出したとか

2014年02月19日

  • 08:41 “ベル研究所が開発するOS「Plan 9」が新たにGPLv2で公開される | SourceForge.JP Magazine” http://bit.ly/1jPdzy3
  • 09:24 iddy 終了。リンクとか外さないと。 / “【重要なお知らせ】iddyサービス終了のお知らせ | iddy 開発者ブログ” http://bit.ly/1feX5Mf
  • 09:24 7,000円台ぐらいまでで出たら即買ってもいいな。iPad 2 での FaceTime のかわりになる。もし国内で出る事があればもっと高くなるんだろうなぁ。 / “数千円で買えて携帯会社と契約不要の「Skypeスマートフォン...” http://bit.ly/1feX7Uk
  • 09:24 「運営者が飽きた」 / “iddy 終了について補足 | WWW WATCH” http://bit.ly/1m7oLnX
  • 10:35 歌うキーボード ポケット・ミク (大人の科学マガジン特別編集)とな。 http://amzn.to/1bjmkNH
  • 21:25 今作っている機能、テーブル1つで済ませるつもりだったけれど、ゴチャゴチャしてきたのでやっぱり明日分ける。
  • 22:53 “大雨・大用に日本野鳥の会バードウォッチング長靴” http://bit.ly/1cpOp4s
  • 24:29 さてこの Subversion で管理しているコードを Git 管理にするかなととりあえず svn log したら「作業コピーではありません」と出て、あれっと思ってみたら CVS/ というディレクトリが。
  • 24:33 そしてなんでこれ /var/www 以下できちんと動いているのに手動で動かすとモジュール見つからないのって思って風呂入って出てきたら、シェル上では perlbrew で別の Perl が動いているのを思い出したとか。
  • 25:03 “文字列検索コマンド「grep 2.17」リリース | SourceForge.JP Magazine” http://bit.ly/1gVu5sN
  • 25:03 “CSRF対策用トークンの値にセッションIDそのものを使ってもいい時代なんて、そもそも無かった” http://bit.ly/1kXbPTN
[ 2月19日全て ]

2015年5月13日 (水)

レクサー・リサーチ開発同窓会

rimage:/nDiki/Flickr/17034996273.jpg

2月の Developers Summit 2015 で zakwa 氏と再会したのをきっかけに、当時一緒に仕事をしていた気が置けないソフトウェア開発者4人で同窓会をすることになった。セッティングしてくれた zakwa 氏ありがとう!

COGS DINING KAGURAZAKA (コグス ダイニング 神楽)

手配してくれたお店は「焼きたてパンとワインのお店」COGS DINING KAGURAZAKA。神楽から路地に入ったところにあるお店で、上品な味の料理で満足だった。店内もうるさくなくて話しやすかったし、たばこを吸っている人もいなかったので快適だった。

ソフトウェア開発

現職のまま続けている1人と、別の場所で働くことになった3人だけれどみなそれぞれソフトウェア開発現場に関わっていて、それぞれの開発スタイルなどについて情報交換したり。

大企業だからしっかりした開発をしているとか、スタートアップだからモダンな開発をしているとかでは必ずしも無いよねという話だった。例えばバージョン管理一つにしてもうまくできていない(やっていない)場合も多いとのこと。当時を振り返ってみると小規模かつ独学の状況ながら、今では普通になってきたプラクティスやツールをその時から実践/活用していたなと自画自賛した。

「書けなくなったホワイトボードマーカーはその場で床に投げ捨て」に共感を持ってもらえていたのが、振り返って当時の自分の一番の成果だな。

退職時に使っていた社内 WikiNaney 謹製のものだったのでその後どうなったのかなとたまに気になっていたのだけれど、ビル管理会社の人に社内サーバの電源を切られたことによりサーバごと死んで闇に葬られたらしい。R.I.P.

その他

同窓会らしく「あのひとは今」的な話をしたり、当時フィルムカメラで撮っていた業務風景のアルバムを持ってきて盛り上がったり。あとはレーシックやドライアイ治療ひぇー的な話題が出たり。あとは展示会の時のレクサー・リサーチポロシャツ制作秘話とか。

そういえば出席はできなかった2013年2月開催の「LEXER設立20周年記念サロン・パーティ」で会社のるぐるロゴの立体置物が配られたと聞いて、あ、欲しかったなーと。

[ 5月13日全て ]

2020年8月23日 (日)

Cloud Station から Synology Drive にアップグレード

先々週に Google ドライブDropbox に同期しないファイルは Cloud Station に同期するように設定した。その際に Cloud Station の後継の Synology Drive が出ているのを知ったので、今日アップグレードすることにした。

公式サイトの手順に従いアップグレード

サーバ側は問題なく終了。依存する Node.js が先立ってインストールされて「へー」ってなった。

クライアント側の初回同期に注意

Mac 側はちょっと大変な事態に。Synology Drive Client をインストールすることで Cloud Station Drive が置き換えられて同期設定も移行された。

問題はここから。移行後の初回同期で、変更が無いファイルも全てサーバからクライアント側にガンガン同期し始めた。これ、ファイル内容に変更はないのだけれど Time Machine 的には増分バックアップ対象になってしまって無駄なバックアップが作られることになった。

しかも一部ファイルが書き込めないとリトライし続けている様子。オーナーの書き込み権限がなかったファイル(CVSRCS のファイルや過去 CD-R からコピーした psd ファイルなど)っぽい。

同期途中で一時的に「双方向同期」を「単方向アップロード」に変更してみた。アップロード方向だとローカルホスト上で更新がなければ転送しないようだ。

初回の同期が終わったところで「双方向同期」に設定を戻してみたところ、やはりまたダウンロードを始めてしまった。バックアップ目的でしか同期していないので「単方向アップロード」のままにしておくことにする。

Mac のメニューバーに表示されるアイコン

そうそうメニューバーに表示される Synology Drive Client のアイコンがイケてないと思ったのだけれど設定から「シンプルなシステム トレイ アイコンを使うにする」にしたら単色のいい感じのなった。

2020年8月29日 追記

「単方向アップロード」にした際に「ローカルで削除されたファイルをサーバーに保存」がオンになっていたのでオフに。

削除済みのものが NAS 側だけに残っているとわけが分からなくなるので一度「双方向同期」に変更したら、削除済みのファイルがローカルに戻ってきてちょっと辛いことになり始めたので中断。いったん同期タスクを削除 & NAS 側を削除し、あらためて双方向同期させた。

[ 8月23日全て ]

About

Naney Naneymx

Naney (なにい) です。株式会社MIXIで SNS 事業の部長をしています。

※本サイトの内容は個人的見解であり所属組織とは関係ありません。

Process Time: 0.060387s / load averages: 0.93, 0.66, 0.46