SVNが管理するパス内にシンボリックリンクファイルを作成し、そのパスをSVNにコミットし、後でパスをチェックアウトするとします。
シンボリックリンクファイルは存続しますか?
シンボリックリンクファイルが相対パスで構成されている場合、チェックアウトが行われる「どこでも」機能しますか?
落とし穴はありますか?
一般に、はいです。
ただし、一部のクライアントはシンボリックリンクを適切に処理しません。 Eclipse IDEのサブクリップは、シンボリックリンクの代わりにディレクトリを作成します。
したがって、開発に着手する前に、クライアントがそれを実行していることを確認するのが最善です。
Subversion機能ページ から:
シンボリックリンクはバージョン管理できます。
Unixユーザーは、バージョン管理下にシンボリックリンクを配置できます。リンクはUnix作業コピーでは再作成されますが、win32作業コピーでは再作成されません。
はい
権限が変更されない限り、変更する必要があります。
Windowsのチェックアウトでは機能しません。
シンボリックリンクはWindowsマシンでは存続しません。これは問題になる可能性があります。
Windowsマシンでは、シンボリックリンクはプレースホルダーファイルの形式をとります*)。次に例を示します。
style.css
:
リンク../www_public/styles.css
*):これらのファイルには「svn:special
"プロパティに値" *
"。
プロジェクトを移動先サーバーに移動/アップロードする前に、Windowsマシンにデータをエクスポートする必要がある場合があります。
プレースホルダーファイルから実際のシンボリックリンクを再作成することで素晴らしい仕事をする小さなシェルスクリプトを使用します。
#!/bin/sh
grep -lr '^link ' . | while read placeholderfile
do
linecount=`wc -l $placeholderfile | cut -c1`
if [ $linecount -eq 0 ] ; then
linkfile=`cut -c6- "$placeholderfile"`
ln -sf "$linkfile" "$placeholderfile"
echo -e "[\E[32;40mOK\E[37;40m] Replaced $placeholderfile with symlink"
else
echo -e "[\E[31;40mWARNING\E[37;40m] $placeholderfile contains newline(s)"
fi
tput sgr0
done
このスクリプトは、文字列 "link
"で始まり、改行を含まないすべてのファイルがシンボリックリンクであることを前提として機能します。
NTFSは最初からシンボリックリンクをサポートしています-これはNTのPOSIXサブシステムの遺産です。したがって、シンボリックリンクを作成できます。ただし、OSとしてのWindowsは、Win 7以降でのみシンボリックリンクを認識できます。そして、それらは制限されています-デフォルトのポリシーでは、通常のユーザーはMKLINKでシンボリックリンクを作成できません。
Windows 7以降、OSはシンボリックリンクを認識します。いくつかのドキュメントについては here を参照してください。 Windowsの通常のSVNクライアントはまだこれをサポートしていませんが、cygwinのsvnはサポートしています!