2012-07-11 6 views
5

私は、回路マスクのようなマスクと思っていますが(と思う) - 私は、共通のソースは以下のようになりc:\sourceファイルシステムのマスクなどはありますか?

インスタンスAに物理的になり

mask chart

便利なチャートで説明しましょう物理的にc:\instanceAではなく、最初はc:\instanceBに物理的になりc:\source

インスタンスBにすべてのものへのシンボリックリンクが、何もないが、最初ですべてにシンボリックリンクが、何もありません

インスタンスAとインスタンスBに変更を加えたため、インスタンスフォルダから削除されたファイルをCommonSourceから隠すマスクを作成し、既存のCommonファイルが存在する場合はインスタンスディレクトリに新しい物理ファイルを作成しますソースファイルが変更されました。 新しいファイルはインスタンスフォルダに存在しますが、共通ソースに戻されることはありません。

このタイプの設定は、別個のスレッドが異なるインスタンスで動作する複数のインスタンスに対して、さまざまな種類の小さな調整をたくさん行うプロジェクトにとって非常に便利です。

私はシンボリックリンクについて知っていますが、ファイルを変更する場合には不足しています。

これを達成できるものはありますか?もしそうでなければ、これを作ってそれを特許しようとするべきですか?私には良いアイデアのようだ。

私はWindows Server 2008以降になります。

+0

あなたの最後の質問には、特許に関して:*いいえ*。 –

+0

実際の質問は次のとおりです。データサイズに問題がありますか、これらの「インスタンス」の管理に問題がありますか?有用な答えは、これらの側面に対処する必要があります。 –

答えて

8

恐怖私は明白ですが、gitはこの動作を達成するために使用できるツールの1つです。

  1. 新しい、ユニークなブランチをチェックアウト

、gitリポジトリをあなたの "共通ソース" の各インスタンスでリポジトリ二回 "InstanceA" と "InstanceB"

  • から
  • クローンを作ります"Common Source"で変更が加えられると、 "MASK" (ブランチへの変更)をそれぞれ維持しながら、これらの変更を "InstanceA"と "InstanceB"にマージすることができます。

    これは、あなたが(私が想像する何かが少ないことが望まれて代わりに「共通ソース」は、各インスタンスに出をプッシュするために変更を持つの望むように「共通ソース」から変更ができるようにする追加の利点がを引っ張っていますエラーが発生しやすくなります)

  • +0

    良い点ですが、私がリポジトリをクローンすると、ファイルシステム上のファイルの実際の物理コピーを作成していませんか? – Matt

    +0

    はい、 'InstanceA'と' InstanceB'は 'Common Source'の同じコピーとして開始します - " link "はgitリポジトリで、各インスタンスの' Common Source'からの変更を管理でき、 'Common Source '各インスタンス内に現れます*(gitを使ってマージされた時)*。 – deefour

    +0

    Subversionでも同じことを達成することができました。私が追加する唯一のことは、あなたが望むふるまいを達成するためには、リポジトリをInstanceAとInstanceBの2つの場所にチェックアウトしてから、それらを更新またはコミットしないことです。更新を行った場合、そのフォルダはCommonからのすべての変更を取得しますが、Commitを実行した場合は、その変更を元に戻してCommon内のファイルにマージします。 –

    1

    Windows 7以降、librariesを使用すると、複数の物理的な場所にあるファイルを含めることができます。

    Windows 7にはVirtualStoreタイプのフォルダも含まれています(たとえば、Program Filesフォルダ内のファイルを作成または変更する場合、実際にはユーザー固有のフォルダに作成されます)。 C:\ Users \ user \ AppData \ Local \ VirtualStore。しかし、私は自分自身でこのタイプのフォルダをどのように作成できるのか分かりませんし、私が知る限り、ファイルを追加したり変更したりすることはできますが、その方法でファイルを削除することはできません。

    +0

    私は賞金を授与する人に引き裂かれました。もし私がそれを分けたことができれば、あなたは3分の1になってしまいました。私はコミュニティが投票したところに行きました。しかし、ありがとう – Matt

    +0

    ありがとう@マット。ソース管理を使用することは多くの利点がありますが、これはあなたが求めていることではありません。実際の素晴らしい解決策は、両方のアイデアを組み合わせることです。ソース管理クライアントは、ローカルコピーが共通していることを認識しており、ユーザーが記述した方法で類似点と相違点を管理することが賢明です。 –

    1

    ファイルごとのチェックアウトとアクセス許可をサポートするバージョン管理システムが必要です。次に、ファイルシステムコマンドを受け取り、バージョン管理コマンドに変換する簡単なAPIコンバーターを設定するだけです。

    削除 - >ファイルへのアクセス権を無効にします。

    ディレクトリコマンドは、ローカルコピーとアクセス権のあるものを探す必要があります。

    Open - > grabローカルコピー、リポジトリから失敗したチェックアウトファイル。

    ローカルコピーを保存して、アクセス許可を保存する - >無効にする。 //重複を避ける。

    保存しないで閉じる - >リポジトリからアクセスする権限がある場合は、ローカルコピーを削除します。

    ((ちなみに、このストレージの最適化がバージョン管理のためにややスプリアスようです。ディスク容量が比較的安価である。

    あなたの興味がバージョン管理されていない場合、私はあなたが希望の情報を分離を検討してお勧めしたいです各ブランチの設定ファイルを作成する必要があります)。

    1

    IBM Rational ClearCaseはファイルマスクのような動作をするバージョン管理システムです。 MVFS:MultiVersion File Systemと呼ばれ、通常のネットワークドライブのようなワークステーションにマウントできます。

    ClearCaseサーバー(別名VOB)では、それぞれ異なるコードブランチにある同じファイルの複数のバージョンを保存できます。ユーザーが表示できるファイルのセットはビューと呼ばれます。各ビューには、現在のユーザーに表示されるファイルとバージョンを定義する構成(別名、構成仕様)があります。典型的なファイルは次のようになります。

    # From wikipedia: http://en.wikipedia.org/wiki/IBM_Rational_ClearCase#Configuration_specifications 
    # Show all elements that are checked out to this view, regardless any other rules. 
    element * CHECKEDOUT 
    
    # For all files named 'somefile', regardless of location, always show the latest version 
    # on the main branch. 
    element .../somefile /main/LATEST 
    
    # Use a specific version of a specific file. Note: This rule must appear before 
    # the next rule to have any effect! 
    element /vobs/project1/module1/a_header.h /main/proj_dev_branch/my_dev_branch1/14 
    
    # For other files in the 'project1/module1' directory, show versions 
    # labeled 'PROJ1_MOD2_LABEL_1'. Furthermore, don't allow any checkouts in this path. 
    element /vobs/project1/module1/... PROJ1_MOD2_LABEL_1 -nocheckout 
    
    # Show the 'ANOTHER_LABEL' version of all elements under the 'project1/module2' path. 
    # If an element is checked out, then branch that element from the currently 
    # visible version, and add it to the 'module2_dev_branch' branch. 
    element /vobs/project1/module2/... ANOTHER_LABEL -mkbranch module2_dev_branch 
    
    +0

    私は賞金を授与する人に引き裂かれた - 私はそれを分けることができたなら、あなたは1/3を得ただろう、私はコミュニティが投票した場所に行った。しかし、ありがとう – Matt

    +0

    問題はありません:)喜んで助けてください。 –

    2

    あなたはunion mountを探しています。残念ながら、私はWindowsの実装については気づいていませんが、Linuxのいくつか、特にUnionFSがあります。

    一般的に、これらは読み取り専用のファイルシステムを読み書きのように見せるために使用されます。通常はライブCDです。

    +0

    私は賞金を授与する人に引き裂かれました。もし私がそれを分けることができれば、あなたは1/3になってしまいました。私はコミュニティが投票した場所に行っていませんでした。ありがとう – Matt

    関連する問題