4

シンボリック リンクを介して同じサーバー上のバージョン管理されていないディレクトリのファイルに依存する、バージョン管理下にある Web サイト プロジェクトがあります。

現在、シンボリックリンクをリポジトリに保存しています。アイデアは、誰かが作業コピーを同じサーバーにチェックアウトした場合、プロジェクトの作業コピーを編集してテストしてから、リポジトリにコミットすることができるというものです。

彼らが作業コピーをチェックアウトすると、テスト時にサイト全体が機能するようにシンボリックリンクが正常に設定されます。

プロジェクトで作業するユーザーは Windows ユーザーなので、サーバーに samba 共有を設定し、Windows のネットワーク ドライブにマップしました。ネットワーク共有を介してサーバー上で作業コピーを直接編集し、TortoiseSVN を介してリポジトリに変更をコミットする前に Web ブラウザーでテストできます。

問題

私が抱えている問題は、Samba が期待どおりにシンボリック リンクを解決することですが、ユーザーが変更をリポジトリにコミットしようとすると、TortoiseSVN はリンクされたファイルがプロジェクトの一部であると見なし、ターゲット ファイルをシンボリック リンクではなくリポジトリにコミットしようとします。彼ら自身。

Samba でシンボリック リンクのサポートをオフにしてみました。つまり、リンクされたファイルにアクセスしたくないし、リンクされたファイルをリポジトリにインポートしたくないので、リンクされたファイルを解決できません。これの問題は、私が得ることですCan't stat '\\webserver\projects\working\project\symlinked_file.php'. Access is denied

シンボリックリンクの問題を除けば、他のすべては 100% 完全に機能します。ユーザーは、Web サイト プロジェクトを自分のマシンにチェックアウトして作業する (ただしテストはできない) か、開発 Web サーバーの自分のスペースにチェックアウトして作業し、完全にテストすることができます。そのため、ワークフロー プロセスを変更したくありません。シンボリック リンクの問題に対する解決策が必要なだけです。

どうもありがとう。

4

3 に答える 3

2

リポジトリからシンボリック リンクを削除することにしました。次に、作業コピーにシンボリック リンクを作成するようユーザーに求める bash スクリプトを作成しました。follow symlinksTortoiseSVN がリンクされたファイルをリポジトリに追加しようとするのを止めるために、Samba のオプションを必ずオフにする必要がありました。

また、ユーザーが TortoiseSVN を使用してコミットを実行すると、変更ログにリンクが表示されますが、チェックされないため、リポジトリに追加されないことに注意してください。それらを無視する必要があります。

于 2010-03-10T17:13:33.393 に答える
0

問題は、Windows がシンボリック リンクを認識していないことですが、Tortoise も Windows チェックアウトでシンボリック リンクを破棄しません。解決策は、人々が Windows 共有で自分自身をチェックアウトできるようにし、その後、シンボリック リンクを元に戻す方法を見つけることです。

もちろん、Tortoise は変更されたファイル/ディレクトリなどについて文句を言うので、それらを単に上書きするという選択肢はありません。シンボリックリンクされたディレクトリに静的画像/その他のリソースがあるWebサーバーの場合、単純なAliasApache構成で機能しますが、残念ながら、コードベースにはシンボリックリンクによるコードも含まれています.

debian では、unionfs-fuseこれらの問題を解決しました。ここでうまくいくと思われるレシピ:

  • Linux サーバー (svnroots) のどこかにベース チェックアウトを作成します。
  • 「オーバーレイ」(枝肉) を作成するディレクトリを作成します。
  • svn-checkouts dir でシンボリック リンクを検索し、死体で再作成します。

.

for file in `find $DEVPATH/svnroots/ -type l`;do
       path=`dirname $file | sed "s,$DEVPATH/svnroots,$DEVPATH/carcass,g"`
       mkdir -p $path
       path=$path/`basename $file`;
       ln -s `readlink $file` $path;
done
  • 目的のディレクトリを作成します (共有から peoples ファイルを使用しますが、シンボリック リンクは Subversion に保存されます:

.

for user in ${windowsusers[@]};
    unionfs-fuse -o cow,allow_other,suid,uid=33,gid=33 $DEVPATH/carcass=ro:$DEVPATH/$user/=rw $DEVPATH/correct_dirs/$user
done

そのディレクトリでの読み取り/書き込みはユーザー ディレクトリに移動します。carcass ディレクトリは読み取り専用ですが、ユーザー ディレクトリにオーバーレイされるため、正しいシンボリック リンクが作成されます。スクリプトは、Subversion のシンボリック リンクの変更で再実行するのに十分簡単です (再マウントは必要ありません。枝肉の変更は、直接 correct_dirs に反映されます)。

于 2011-07-15T15:10:48.970 に答える