Subversionで、needs-lock という属性が必要になったんですよ~!
な~に~!?やっちまったな!
ということで、Subversionの話でございます。
あんまり、ありえないシチュエーションではありますが、今回はWindows環境にSubversion(正式名:Apache Subversion、略称:SVN)と、TortoiseSVNっちゅうSVNをGUIで操作できるクライアントソフトをインストールしています。
普通は、LinuxなんかにSVNサーバとしてSubversionをインストールして、WindowsにSVNのクライアントソフトであるTortoiseSVNをインストールするってのが一般的かと。
では、レッツ、トライ。
SVNのリポジトリ用のディレクトリを作成
まずは、適当にディレクトリを作成します。
そしたらば、ディレクトリを選択した状態で右クリックし、「TortoiseSVN」>「ここにリポジトリを作成(Y)」を選択。
ダイアログが表示されたらば、「フォルダー構成を作成(C)」をクリック。
「OK」をクリック。
「OK」をクリック。
こんな感じですね。
リポジトリをローカルに構築
今回はSVN、TortoiseSVNが両方ともWindowsにインストールされてるのでややこしいのですが、別サーバにあるSVNのリポジトリを、WindowsのPCに持ってくるイメージですかね。
SVNのリポジトリを持ってくる用のローカルのディレクトリを作成します。
そしたらば、ディレクトリを選択した状態で右クリックし、「SVNチェックアウト(K)...」を選択。
「リポジトリのURL」には、SVNのリポジトリとして作成したディレクトリのパスを指定。「チェックアウト先のディレクトリ(D):」には、ローカルのディレクトリを指定。
「OK」で。
ディレクトリの中を見てみると、
⇧ ディレクトリができていて、「trunk」という場所に、管理したいディレクトリやファイルを配置して、SVNのリポジトリに対してコミットしていく使い方をするようです。
「.svn」というディレクトリの中には、「wc.db」というsqlite3 のデータベースのファイルがあって、このファイルでSVNのリポジトリとやり取りするための情報があって、こいつが壊れると、結構厄介です、というか、ほとんど挽回不能です。
話が脱線しましたが、「trunk」ディレクトリに、管理したいものを追加します。
まぁ、こんな感じのものを用意したとして、
「trunk」ディレクトリに、追加します。
そしたらば、ディレクトリ上で右クリックし、「TortoiseSVN」>「追加(A)...」を選択。
「OK」で。
ディレクトリ上で右クリックし、「SVN コミット(C)...」を選択。
コミットするときに、あとから見ても分かるようにメッセージを入力すると良いようです。「OK」で。
コミットが完了しました。
ローカルのほうは、SVNリポジトリの管理下に入ったというアイコンが付きました。
ローカルのディレクトリ上で右クリックし、「TortoiseSVN」>「リポジトリブラウザ(R)」を選択。
ローカルに追加したものが、SVNのリポジトリの方にも追加されています。
いや~、無事に、SVNリポジトリにローカルの内容を反映できましたね、めでたし、めでたし...って、ちゃうやん!今回の本筋はそうじゃないっす!
needs-lockという属性の追加
これっすね。プロパティって説明なのに、属性っていう情報もあるし、混乱するわ~!
新しくファイルの追加やインポートを行った際に、拡張子を元にプロパティを付加するように、 Subversion は 「autoprops」 を設定できます。これはクライアントごとに、 Subversion 設定ファイルに適切に autoprops が設定されているかどうかに依存します。tsvn:autoprops
をフォルダーに設定しておくと、インポートやファイル追加の際に、ユーザーのローカルに autoprops をマージするようになります。この形式は subversion の autoprops と同じで、.sh
拡張子を持つファイルに2つのプロパティを セットしたい場合は、*.sh = svn:eol-style=native;svn:executable
のようになります。
https://tortoisesvn.net/docs/release/TortoiseSVN_ja/tsvn-dug-propertypage.html
⇧ 上記サイト様を参考にさせていただきました。
ローカルのディレクトリ上で右クリックし、「TortoiseSVN」>「プロパティ」を選択。
「新規(N)... ▶」を選択。
「その他(O)」を選択。
「プロパティ名:」として、「svn:auto-props」を選択。
k「プロパティ値:」に「*=svn:needs-lock」を設定。一応、「プロパティを再帰的に適用(A)」のチェックを付けました。「OK」をクリック。
で、「OK」。
ローカルのほうを見てみると、
なんか、プロパティは設定されてるっぽい?
とりあえず、SVNリポジトリの最新の内容をローカルに反映します。
ローカルのディレクトリ上で右クリックし、「SVN 更新」を選択。
そんでは、SVNリポジトリにコミットして、プロパティの追加を反映します。
ローカルのディレクトリ上で右クリックし、「SVN コミット」を選択。
「OK」で。
適当なファイルを選択した状態で右クリックし、「プロパティを表示(W)」を選択。
⇧ う~ん、これで、設定されたのかな?
もうひとつの方法は、 tsvn:autoprops
プロパティをフォルダーに設定する方法で、次節で説明しています。この方法は、 TortoiseSVN クライアントでしか動作しませんが、更新を行った際に、すべての作業コピーに伝播します。
Subversion 1.8で、ルートフォルダーに svn:auto-props
プロパティが設定できるようになりました。プロパティの値が自動的にすべての子項目に継承されます。
どちらの方法を選択しても、 auto-props はファイルが作業コピーに追加された時にのみ適用されることに注意してください。 auto-props は、すでにバージョン管理下にあるファイルのプロパティを変更することはありません。
https://tortoisesvn.net/docs/release/TortoiseSVN_ja/tsvn-dug-propertypage.html
⇧ ...まじか。
普通に、「svn:needs-lock」で設定してみますか。
「プロパティ名:」を「svn:needs-lock」、「プロパティ値:」は何でも良いらしい。
「OK」で。
コミットしてみます。
ローカルのほう。
プロパティの追加はできたっぽいけど...
普通に、ロックの取得をしなくてもローカルのファイルを編集できてしまうんだが...
TortoiseSVNの設定の「コンテキストメニュー」の説明を見た感じでは、svn:needs-lock が設定されてるってことになるはずなんだが....
「ロックを取得(K)...」が表示されてるし。
ちょっと、調査が必要ですかね...SVNもよく分からんですね...
毎度毎度、モヤモヤ感が半端ないですね...
2018年10月4日(木)追記:↓ ここから
ちなみに、Windowsでは、表示できるアイコンの数をレジストリファイルで制限しているようで、その数以上には表示できないんだとか...
「TortoiseSVN」>「設定(S)」ってから、
「レジストリファイルを起動する」を選択。
「コンピューター¥HKEY_LOCAL_MACHINE¥SOFTWARE¥Microsoft¥Windows¥CurrentVersion¥Explorer¥ShellIconOverlayIdentifiers」配下にアイコンがあるんですが、
⇧ 上記サイト様によりますと、マックスは15個までらしい....。
まぁ、SVNのneeds-lockが機能してない問題とは関係ないですが...
2018年10月4日(木)追記:↑ ここまで
今回はこのへんで。