web-dev-qa-db-ja.com

シンボリックリンクファイルはSVNを通過できますか?

SVNが管理するパス内にシンボリックリンクファイルを作成し、そのパスをSVNにコミットし、後でパスをチェックアウトするとします。

  1. シンボリックリンクファイルは存続しますか?

  2. シンボリックリンクファイルが相対パスで構成されている場合、チェックアウトが行われる「どこでも」機能しますか?

  3. 落とし穴はありますか?

15
jldupont

一般に、はいです。

ただし、一部のクライアントはシンボリックリンクを適切に処理しません。 Eclipse IDEのサブクリップは、シンボリックリンクの代わりにディレクトリを作成します。

したがって、開発に着手する前に、クライアントがそれを実行していることを確認するのが最善です。

16
davethegr8

Subversion機能ページ から:

シンボリックリンクはバージョン管理できます。

Unixユーザーは、バージョン管理下にシンボリックリンクを配置できます。リンクはUnix作業コピーでは再作成されますが、win32作業コピーでは再作成されません。

  1. はい

  2. 権限が変更されない限り、変更する必要があります。

  3. Windowsのチェックアウトでは機能しません。

23
John T

シンボリックリンクは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"で始まり、改行を含まないすべてのファイルがシンボリックリンクであることを前提として機能します。

8
Jacco

NTFSは最初からシンボリックリンクをサポートしています-これはNTのPOSIXサブシステムの遺産です。したがって、シンボリックリンクを作成できます。ただし、OSとしてのWindowsは、Win 7以降でのみシンボリックリンクを認識できます。そして、それらは制限されています-デフォルトのポリシーでは、通常のユーザーはMKLINKでシンボリックリンクを作成できません。

0
jm73

Windows 7以降、OSはシンボリックリンクを認識します。いくつかのドキュメントについては here を参照してください。 Windowsの通常のSVNクライアントはまだこれをサポートしていませんが、cygwinのsvnはサポートしています!

0
Arend