1

Linuxマシンには次のリポジトリ構造があります。

-- source_control
    -- projects
        project1
        project2
        ...
    -- repositories
        repo1
        repo2
        repo3
        ...

つまり、source_controlとという2つのネストされたディレクトリを持つディレクトリがprojectsありrepositoriesます。repositoriesディレクトリには「単純な」リポジトリ(つまり、サブリポジトリを持たないリポジトリ)が含まれ、単なる薄層でディレクトリのprojectsサブリポジトリを含むリポジトリが含まれますrepositories

現在、さまざまなプロジェクトの.hgsubファイルは次のようになっています。

repo1 = /mnt/network/drive/source_control/repositories/repo1
repo2 = /mnt/network/drive/source_control/repositories/repo2

等々。現在、すべての開発者が同じネットワークドライブがマウントされているLinuxマシンで作業していたため、これは完全に機能しました。ただし、Windowsからも作業する必要があります。これにより、Windowsマシンがサブリポジトリパスにアクセスできないため、いくつかの問題が発生します(ネットワークドライブはWindowsマシンからアクセス可能であり、異なるパスを使用するだけです)。

.hgsubファイルを次のように変更してみました:

repo1 = ../../repositories/repo1
repo2 = ../../repositories/repo2

しかし、これは機能しません(.hgsubファイルをコミットすると、サブリポジトリは空になります)。

HTTPでリポジトリを提供しようとしましたが、処理速度が大幅に低下するため、より良い方法を見つけたいと思います(すべてのマシンがローカルネットワークにあります)。.hgsubWindowsとLinuxの両方のマシンから作業できるように、相対パスを使用する正しい方法は何ですか?

4

1 に答える 1

1

Mercurial wiki によると、これを完全に新しいリポジトリで動作させる方法は次のようになります。

$ echo repo1 = ../../repositories/repo1 > .hgsub
$ hg clone ../../repositories/repo1
; here you could update to whichever version you wanted
$ hg add .hgsub
$ hg commit -m "New relative subrepo added"

次に、パスが相対であるため、メイン リポジトリを複製すると、サブ リポジトリも複製されます。それは私の Windows マシンから動作するので、あなたの考えは基本的に正しいです。

あなたの例では.hgsub、サブレポが指すものを再定義したため、変更をコミットするとディレクトリがクリアされると思います(この動作が設計によるものかどうかはわかりません)。したがって、おそらくコミットする前に、サブディレクトリ全体を自分で削除して再クローンすることができます。

; modify .hgsub as above
$ rm -rf repo1
$ hg clone ../../repositories/repo1
$ hg commit -m "Made repo1 relative"

これを行うと、更新する人がサブレポ全体を再度プルダウンする必要があるか、プロジェクト全体を再クローンする必要があるかもしれませんが、その後は「うまくいく」はずです。

もちろん、念のため、最初にテスト プロジェクトで試してみてください :)

于 2013-01-29T16:46:45.063 に答える