SMB 共有経由でアクセスできるいくつかのファイルのバージョンを制御する必要があります。これらのファイルは複数の人によって変更されます。ファイル自体は Web サーバーによって直接使用されます。
これらは運用ファイルであるため、ユーザーに強制的にローカル コピーを取得し、編集し、コミットしてプッシュ バックさせるようにしました。残念ながら、そのマシンには Mercurial サーバーがありません。
私の側で Mercurial を構成する適切な方法は次のとおりです。
- バージョン管理 (.hg ディレクトリ) は共有に保持されます
- 共有上のファイルが最新バージョンであることを確認しますか?
このサーバーへのアクセス権がありません (共有経由以外)。そのマシンにmercurialサーバーがあれば、フックを使用して本番ディレクトリのファイルを更新したでしょう(これは、私が達成したいことを強調するために言っているだけです-私はそのサーバーを制御していないため、このアプローチは不可能です)
ありがとう!
更新:中間サーバーを使用することになりました(これを制御できます)。フックをオンにchangegroup
するとスクリプトがトリガーされ、 i) hg update
新しいローカル ファイルが作成され、 ii)それらが SMB 共有にコピーされます。
EDIT 1アレックスとのコメントでの議論に続いて、コマンドライン出力の詳細バージョンを見てきました。\\srv\hg\test1
リポジトリ[hooks]
にはchangegroup = hg update
. からの出力は、hg push -v
いくつかの洞察を提供します。
pushing to \\srv\hg\test1
query 1; heads
(...)
updating the branch cache
running hook changegroup: hg update
'\\srv\hg\test1'
CMD.EXE was started with the above path as the current directory.
UNC paths are not supported. Defaulting to Windows directory.
abort: no repository found in 'C:\Windows' (.hg not found)!
warning: changegroup hook exited with status 255
checking for updated bookmarks
listing keys for "bookmarks"
上記の出力を正しく理解している場合:
[hook]
cmd.exe が受信側サーバー上にあったにもかかわらず、クライアント上でトリガーされた- リモートリポジトリを更新しようとしました
- ...しかし、UNC がサポートされていないため失敗しました
alexの答えは正しかった - MS Windows では (まだ?) 動かない。(アレックスが間違っている場合は、コメントで訂正してください)