プログラマーのメモ書き

伊勢在住のプログラマーが気になることを気ままにメモったブログです

svn -> git へ移行(補足):期限切れの証明書、空ディレクトリ への対応

以前、

blog.mori-soft.com

として、SVN から git へ移行する手順をまとめました。

最近、久しぶりに昔のSVNのリポジトリをGitに移行した際に、SSLの証明書の期限が切れていて、対応に若干手間取ったので、対応方法を書いておきます。 あと、svn にある空ディレクトリの話もです。

期限切れの証明書

エラーの内容

さきほどの記事のAuthor情報の抽出時に、こんな感じのエラーが出ました。

mor@DESKTOP-V2DMDRJ:~/git_migration$ java -jar ../svn-migration-scripts.jar authors https://サーバーIPアドレス/svn/repos_name/ username password
About to create the authors file.
svn: E170013: Unable to connect to a repository at URL 'https://サーバーIPアドレス/svn/repos_name'
svn: E230001: Server SSL certificate verification failed: certificate has expired, certificate issued for a different hostname, issuer is not trusted
Could not communicate with Subversion: check the URL of the repository, the username and the password are all valid
Error written to /tmp/error-script-9134608188443191433.txt
mor@DESKTOP-V2DMDRJ:~/git_migration$

昔のSVNリポジトリが入っているサーバーを久しぶりに起動したので、証明書がオレオレ証明書の上、期限が切れているようです。

このとき、使っている移行ツールは、 Bitbucket 謹製の svn-migration-scripts.jar なのですが、これ自体には、証明書に関するオプション等がないようです。

対応方法

どうしたものかと思っていたのですが、要はSVNが接続先のサーバーを信頼すればいいだけなので、下記のようにしました。

mor@DESKTOP-V2DMDRJ:~$ svn ls https://サーバーIPアドレス/svn/repos_name/
'https://サーバーIPアドレス:443' のサーバ証明書の認証中にエラーが発生しました:
 - 証明書は信頼のおける機関が発行したものではありません。証明書を手動で認証
   するためにフィンガープリントを用いてください!
 - 証明書のホスト名が一致しません。
 - 証明書の期限が切れています。
証明書情報:
 - ホスト名: xxxxx.mori-soft.com
 - 有効範囲: Dec  6 01:05:05 2012 GMT から Dec  6 01:05:05 2013 GMT まで
 - 発行者: xxxxx.mori-soft.com, Private, Ise, Mie, JP
 - フィンガープリント: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
拒否しますか (R)、一時的に承認しますか (t)、常に承認しますか (p)? p

サーバー上のリポジトリを svn ls で表示しようとすると、当然証明書でエラーが起こるので、信頼する?と聞かれます。それを使って、『常に承認する (p)』を選択してやる、というものです。

続いて、リポジトリのパスワードを聞かれるので、

認証領域: <https://サーバーIPアドレス:443> Subversion repository
'mor' のパスワード: *******
-----------------------------------------------------------------------
ATTENTION!  Your password for authentication realm:

   <https://サーバーIPアドレス:443> Subversion repository

can only be stored to disk unencrypted!  You are advised to configure
your system so that Subversion can store passwords encrypted, if
possible.  See the documentation for details.

You can avoid future appearances of this warning by setting the value
of the 'store-plaintext-passwords' option to either 'yes' or 'no' in
'/home/mor/.subversion/servers'.
-----------------------------------------------------------------------
暗号化されていないパスワードを保存しますか (yes/no)? no
branches/
tags/
trunk/
mor@DESKTOP-V2DMDRJ:~$

パスワードを入力してやると、このように svn ls が実行できました。

これで、svnとして、接続先のサーバーが信頼できたので、問題なくAuthorの抽出ができます。

mor@DESKTOP-V2DMDRJ:~/git_migration$ java -jar ../svn-migration-scripts.jar authors https://サーバーIPアドレス/svn/repos_name/ username password
About to create the authors file.
admin = admin <admin@mycompany.com>
mor = mor <mor@mycompany.com>
mor@DESKTOP-V2DMDRJ:~/git_migration$

あとは手順通りにgitにい公図ればOKです。

ちなみに、自分で考えたように書いてますが、元ネタはこちらです。ありがとうございます。

eichisanden.hateblo.jp

空ディレクトリ

git では空ディレクトリはリポジトリに登録できません。svnではできていたのにね。 プログラムにもよりますが、空でもそのディレクトリがあることを前提にしていると困るので、git でも空ディレクトリを登録してやる必要があります。

簡単には、

$ find . -type d -empty

として、空ディレクトリを調べます。 今回は、見つかった空ディレクトリのうち、ごく一部だけを登録すればよかったので、手作業で touch .gitignore として、空ディレクトリに空の .gitignore を作ってやりました。

参考情報

その他にも、

空のディレクトリに.gitkeepを配置するコマンドラインツール

のように、自動化したり、

git svn 実行時に自動で空の .gitignore をつけてくれるオプション (--preserve-empty-dirs) もあるそうです。

urashita.com

次はこれ試してみたいな。

OSC名古屋 2018 に出展してきました

先日(2018年5月19日)、OSC名古屋が開催されました。

www.ospn.jp

今回は、ここに、『三重勉強会・コミュニティ共同ブース』として出展しましたので、出展時の様子とその背景などをメモっときます。

当日の様子

当日のブースはこんな感じでした。

f:id:junichim:20180521093520j:plain

基本、チラシをおいてるだけです。(ほぼ)チラシだけなので、ブースには一人入れば全く問題なしですが、当日は、Little Coder Mie の @ さんが来ていただけましたので二人で入ってました。

ちなみにご紹介した勉強会・コミュニティさんはこんな感じです。

CoderDojo伊勢

f:id:junichim:20180521093432j:plain

coderdojo-ise.jimdo.com

今のところ、三重県内の CoderDojo は CoderDojo伊勢 だけだそうです。

Little Coder Mie

f:id:junichim:20180521094320j:plain

ws.moyashi-koubou.com

昔から子供向けのプログラミングイベントをやってます。毎回趣向を凝らして、いろんなイベントで楽しさを体験できるようにされています。

WordBench 三重

f:id:junichim:20180521094515j:plain

ホーム | 三重 | WordBench

今年3月(2018年3月)から立ち上がったそうです。県内でこういう活動があることを、多くの方に知れ渡ってほしいですね。

伊勢ギーク・フェア/チーム伊勢

f:id:junichim:20180521095017j:plain

f:id:junichim:20180521095048j:plain

https://www.facebook.com/igfaire/

今年も伊勢ギーク・フェア開催するそうです。ぜひ、出展等、ご検討ください。

伊勢IT交流会

f:id:junichim:20180521095140j:plain

https://www.facebook.com/iseitkouryuukai/

自分が主催者なんで、改めて紹介もなんですが、伊勢で雑談とLTを中心にした、IT系の交流会やってます。 次回は、6月2日(土)にやりますよ(申し込みは connpass からお願いします)。

なんでこんなことしているのか

ブースとしては、三重県内で活動しているIT系の勉強会やコミュニティを紹介するブースです。まあ、紹介といっても大げさなものではなく、チラシ置いといて、興味のありそうな方とお話しするだけなんですが。

地方(この場合は三重県)にいる技術者の方はよくわかると思うのですが、勉強会を探そうとしてもなかなか見つからなかったり、たまにあっても定期開催していなくて、次はいったいいつなんだ?(その後開催がなかったり・・・)となったりすることが多々あると思います。それはそれで事情があるので致し方ないと思います。

そうなると次は、地理的な要因が許す場合は、機会を見つけては近隣の(比較的大きな)都市まで出かけて勉強会に参加する、といったことがよくあると思います。 まあ、近隣の勉強会に参加することも、得るものも大きくこれはこれで悪くはないのですが、いかんせん、金銭的・時間的な負担が大きいのが難点です(私の場合、家族持ちエンジニアになってからは特に後者に悩まされるようになりました)。

とはいっても、地方でやってる勉強会やコミュニティもまったくないわけではないので、その存在をぜひ知ってもらい、勉強会・コミュニティを探している人と主催側の両方にプラスになればと思いました。

じゃあ、具体的にどうするか?ですが、三重県の場合、何かあれば名古屋に出てくるパターンが多いかな?という予想もあって、OSC名古屋に出展することにしました(大阪、京都、に行くよという意見もありますがここは私の都合で決めました)。

ということで、同じ県内で活動している方々に声をかけさせていただいて、紹介ブースとして出てみたという具合です。

まあ、実は、似たようなことは昨年の OSC名古屋2017 で『伊勢志摩地域コミュニティ共同ブース』という形でやったのですが、それも元々は名古屋の勉強会さんのほうで『名古屋勉強会・コミュニティ協同ブース』という形で出展されていたのをパクったインスパイアされて始めたことです。

まずは、地方でも意外と勉強会・コミュニティとかあるんだ、と知ってもらえればと思います。

効果

まあ、実際の効果のほどはよくわかりませんが、『三重から来てます』とか『三重出身です』という方が、結構いらっしゃいました。 これらの方とお話ししていると、やはり『三重県内で活動があるのを知らなかった』とか、『県内でやってるのを知りたかった』という旨のことを多く聞けました。

存在を知ったからと言って、すぐに勉強会・コミュニティに参加するというわけでもないと思いますが、何かときに、『そういえば、三重県内でもなにやらやってたな』と思い出してもらえればと嬉しいです(で、自分の思ったのが無ければ、ぜひ立ち上げましょう!)。

ということで

OSC名古屋の機に、地方の勉強会・コミュニティを紹介させてもらいましたという話でした。 同じようなことは、他のOSCでもできるんじゃないかなと思いますので、地方の方はぜひ検討してみると面白いんじゃないかと思います。

追記

桑名でも勉強会があるそうです。すいません、知りませんでした。来年はぜひご一緒しましょう!

kuwana.connpass.com

Chrome 拡張で、 Google Apps Script をGit管理できるようにする

Google Apps Script の開発だと、ブラウザ上のエディタで作業するのはいいんですが、ソースコード管理が簡単にできないのがちょっと嫌なところです。

と、ずっと思っていたのですが、下記の記事で紹介されているプラグインを使うと、Google Apps Script がGitで管理できるようになるそうです!

こりゃいい! ということで、早速試してみました。

Chrome拡張のインストール

インストール方法は簡単で、Chrome Web Store から Chrome 拡張として、『Google Apps Script GitHub アシスタント』をインストールすれば終わりです。

ちなみに、GitHubのサイトはこちらでした。

github.com

インストール後、Chrome でGASのスクリプトエディタを開くと、メニューが追加されていれば成功です。 詳しい使い方などは、前述の記事などを参照してください。

使ってみた印象

自分で使ってみた印象は、スプレッドシート埋め込みのGASにも対応できている!というのが一番感動でした。 しかも、操作はごく簡単。これであれば、開発に応じて、適宜コミットしていくことが出来そうです。

ただ、何点か注意する点もあるようです。個人的に気になったのは次のような点です。

常に指定したリポジトリ/ブランチの最新版との Pull/Push になる

なので、任意のコミットを反映するのは、一度リポジトリをforkしてからブランチを切って、pullする、などひと工夫必要です。

また、残念ながら現時点ではタグからpullしてくるのもできないので、過去のある時点のコミットを再現したい場合も同様の工夫が必要になります。

個人的には、せめて、タグからのpullできるようになっているとうれしいなと思います。

ファイル名とそこに含まれている同名の関数がある場合、正しくコミットできない

Known Issues としても紹介されています。

特定のスクリプトファイル名の場合、なぜかpushの対象にならない場合があって、気づいたときはあせりました。

私の場合、 Constants.gs というファイルで、内部に

function Constants() {
}

と関数を定義していたら、見事これに該当してコミットできませんでした。 どうも、利用しているサービスの制限のようで、現時点では致し方ないようです。

pullでファイルの追加がある場合に、エラーとなる場合がある

という問題もありました。

どういった場合に再現するのか、まとめ切れていないのですが、スプレッドシートに紐づく形式の場合に起こりました。新規に作成したスプレッドシートで、スクリプトエディタを開いて、何も変更していない状態でリポジトリの内容を pull してこようとすると起きているようでした。

とはいえ、これはGASの開発をするうえで、非常に便利なツールになるので、GAS触る方は一度試す価値あると思います。

その他の方法

ちなみに、GASでソースコードを管理する方法は他にもあるようで、下記記事などにもまとめられていました。

qiita.com

これらも一度試すと面白いかと思います。