Subversionのneeds-lock属性というか、プロパティというか、結局どっち? 属性らしい

Subversionで、needs-lock という属性が必要になったんですよ~!

な~に~!?やっちまったな!

ということで、Subversionの話でございます。

あんまり、ありえないシチュエーションではありますが、今回はWindows環境にSubversion(正式名:Apache Subversion、略称:SVN)と、TortoiseSVNっちゅうSVNGUIで操作できるクライアントソフトをインストールしています。

普通は、LinuxなんかにSVNサーバとしてSubversionをインストールして、WindowsSVNのクライアントソフトであるTortoiseSVNをインストールするってのが一般的かと。

 

では、レッツ、トライ。

SVNリポジトリ用のディレクトリを作成

まずは、適当にディレクトリを作成します。

f:id:ts0818:20181003201252p:plain

そしたらば、ディレクトリを選択した状態で右クリックし、「TortoiseSVN」>「ここにリポジトリを作成(Y)」を選択。

f:id:ts0818:20181003201547p:plain

ダイアログが表示されたらば、「フォルダー構成を作成(C)」をクリック。

f:id:ts0818:20181003201721p:plain

「OK」をクリック。

f:id:ts0818:20181003201818p:plain

「OK」をクリック。

f:id:ts0818:20181003201934p:plain

リポジトリが作成されました。ディレクトリの中は、

f:id:ts0818:20181003202001p:plain

こんな感じですね。

f:id:ts0818:20181003202106p:plain

 

リポジトリをローカルに構築

今回はSVNTortoiseSVNが両方ともWindowsにインストールされてるのでややこしいのですが、別サーバにあるSVNリポジトリを、WindowsのPCに持ってくるイメージですかね。

SVNリポジトリを持ってくる用のローカルのディレクトリを作成します。

f:id:ts0818:20181003202805p:plain

そしたらば、ディレクトリを選択した状態で右クリックし、「SVNチェックアウト(K)...」を選択。

f:id:ts0818:20181003202856p:plain

リポジトリのURL」には、SVNリポジトリとして作成したディレクトリのパスを指定。「チェックアウト先のディレクトリ(D):」には、ローカルのディレクトリを指定。

f:id:ts0818:20181003202959p:plain

「OK」で。 

f:id:ts0818:20181003203250p:plain

ローカルのディレクトリが、SVNの管理下に置かれました。

f:id:ts0818:20181003203328p:plain

ディレクトリの中を見てみると、

f:id:ts0818:20181003203517p:plain

⇧  ディレクトリができていて、「trunk」という場所に、管理したいディレクトリやファイルを配置して、SVNリポジトリに対してコミットしていく使い方をするようです。

「.svn」というディレクトリの中には、「wc.db」というsqlite3 のデータベースのファイルがあって、このファイルでSVNリポジトリとやり取りするための情報があって、こいつが壊れると、結構厄介です、というか、ほとんど挽回不能です。

 

話が脱線しましたが、「trunk」ディレクトリに、管理したいものを追加します。

まぁ、こんな感じのものを用意したとして、

f:id:ts0818:20181003204236p:plain

f:id:ts0818:20181003204313p:plain

「trunk」ディレクトリに、追加します。

f:id:ts0818:20181003204446p:plain

そしたらば、ディレクトリ上で右クリックし、「TortoiseSVN」>「追加(A)...」を選択。

f:id:ts0818:20181003204804p:plain

「OK」で。

f:id:ts0818:20181003204851p:plain

これで、SVNリポジトリに追加できる準備ができました。

f:id:ts0818:20181003205028p:plain

ディレクトリ上で右クリックし、「SVN コミット(C)...」を選択。

f:id:ts0818:20181003205159p:plain

コミットするときに、あとから見ても分かるようにメッセージを入力すると良いようです。「OK」で。

f:id:ts0818:20181003205417p:plain

コミットが完了しました。

f:id:ts0818:20181003205524p:plain

ローカルのほうは、SVNリポジトリの管理下に入ったというアイコンが付きました。

f:id:ts0818:20181003210913p:plain

SVNリポジトリのほうを見てみます。

ローカルのディレクトリ上で右クリックし、「TortoiseSVN」>「リポジトリブラウザ(R)」を選択。

f:id:ts0818:20181003205817p:plain

ローカルに追加したものが、SVNリポジトリの方にも追加されています。

f:id:ts0818:20181003205954p:plain

 いや~、無事に、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

qiita.com

⇧  上記サイト様を参考にさせていただきました。

ローカルのディレクトリ上で右クリックし、「TortoiseSVN」>「プロパティ」を選択。 

f:id:ts0818:20181003211045p:plain

「新規(N)...   ▶」を選択。

f:id:ts0818:20181003211243p:plain

「その他(O)」を選択。 

f:id:ts0818:20181003212303p:plain

「プロパティ名:」として、「svn:auto-props」を選択。

f:id:ts0818:20181003212536p:plain

k「プロパティ値:」に「*=svn:needs-lock」を設定。一応、「プロパティを再帰的に適用(A)」のチェックを付けました。「OK」をクリック。

f:id:ts0818:20181003212654p:plain

で、「OK」。

f:id:ts0818:20181003212832p:plain

ローカルのほうを見てみると、

f:id:ts0818:20181003213334p:plain

なんか、プロパティは設定されてるっぽい?

f:id:ts0818:20181003213406p:plain

とりあえず、SVNリポジトリの最新の内容をローカルに反映します。

ローカルのディレクトリ上で右クリックし、「SVN 更新」を選択。 

f:id:ts0818:20181003214111p:plain

f:id:ts0818:20181003214237p:plain

そんでは、SVNリポジトリにコミットして、プロパティの追加を反映します。

ローカルのディレクトリ上で右クリックし、「SVN コミット」を選択。 

f:id:ts0818:20181003213815p:plain

「OK」で。

f:id:ts0818:20181003213956p:plain

f:id:ts0818:20181003214310p:plain

SVNリポジトリのほうを確認。

f:id:ts0818:20181003213242p:plain

適当なファイルを選択した状態で右クリックし、「プロパティを表示(W)」を選択。

f:id:ts0818:20181003214514p:plain

f:id:ts0818:20181003214650p:plain

⇧  う~ん、これで、設定されたのかな?

もうひとつの方法は、 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」で設定してみますか。

f:id:ts0818:20181003222804p:plain

f:id:ts0818:20181003222859p:plain

 「プロパティ名:」を「svn:needs-lock」、「プロパティ値:」は何でも良いらしい。

f:id:ts0818:20181003223707p:plain

 「OK」で。

f:id:ts0818:20181003223754p:plain

コミットしてみます。

f:id:ts0818:20181003224418p:plain

f:id:ts0818:20181003224443p:plain

ローカルのほう。 

f:id:ts0818:20181003224609p:plain

SVNリポジトリのほう。

f:id:ts0818:20181003224803p:plain

プロパティの追加はできたっぽいけど... 

普通に、ロックの取得をしなくてもローカルのファイルを編集できてしまうんだが...

TortoiseSVNの設定の「コンテキストメニュー」の説明を見た感じでは、svn:needs-lock が設定されてるってことになるはずなんだが....

f:id:ts0818:20181003232037p:plain

「ロックを取得(K)...」が表示されてるし。

f:id:ts0818:20181003232255p:plain

ちょっと、調査が必要ですかね...SVNもよく分からんですね...

毎度毎度、モヤモヤ感が半端ないですね...

 

2018年10月4日(木)追記:↓  ここから

ちなみに、Windowsでは、表示できるアイコンの数をレジストリファイルで制限しているようで、その数以上には表示できないんだとか...

TortoiseSVN」>「設定(S)」ってから、

f:id:ts0818:20181004201106p:plain

レジストリファイルを起動する」を選択。

f:id:ts0818:20181004201208p:plain

「コンピューター¥HKEY_LOCAL_MACHINE¥SOFTWARE¥Microsoft¥Windows¥CurrentVersion¥Explorer¥ShellIconOverlayIdentifiers」配下にアイコンがあるんですが、

f:id:ts0818:20181004200951p:plain

itmemo.net-luck.com

⇧  上記サイト様によりますと、マックスは15個までらしい....。 

まぁ、SVNのneeds-lockが機能してない問題とは関係ないですが...

 

2018年10月4日(木)追記:↑  ここまで

 

 

今回はこのへんで。