2016-06-20 8 views
2

異なるプロジェクト間で特定のファイルを共有するには共有が必要です。GITはWindows上でディレクトリジャンクションを通常のフォルダとして扱う方法を教えてください。

D:\shared\ 
D:\shared\files-shared-by-all-projects-here 

D:\project1\ 
D:\project1\project1-specific-files-here 
D:\project1\shared <- directory junction to D:\shared 

D:\project2\ 
D:\project2\project2-specific-files-here 
D:\project2\shared <- directory junction to D:\shared 

私はD:\project1D:\project2でセットアップGITレポを持っている私の問題は、GITは唯一の非接合し(すなわち、実際のディレクトリ)内のファイルを追跡するように見えるということです。したがって、私はそうのようなファイル構造を持っています。

私は両方のプロジェクトのためのVisual Studio 2015を使用し、それはプロジェクトが「接合し、」ディレクトリからファイルを持っているとき、チームエクスプローラは非常に奇妙な動作となるのです

  • プロジェクトにディレクトリジャンクションに存在するファイルを追加すると、チームエクスプローラは、ファイル自体ではなく、コミットする変更のリストにのみ親ディレクトリ(ジャンクション)を表示します。 (つまり、ファイルが追加されている)すべての変更をコミットする際に
  • は、ソリューションエクスプローラは、すべて追跡されているなどのファイルやを示してチェックインされた接合に存在していたものないは、保留中の変更のリストに示さ含む(彼らは追加された後:チェックインのように示されており、接合ディレクトリに存在されたファイルの編集

git1

  • は、ために見えるようになりますがチェックアウト
  • 今チームエクスプローラに戻って

git2

  • 、チェックアウトしたファイルが変更されたファイルのリストにを示している:

git3

  • コミットしようとすると、「エラーが発生しました。詳細メッセージ:変更なし。
  • 明示的に追加すること

git5

:。チェックインのように失敗したコミットれる変更されたファイルが、それにもかかわらず表示され、ソリューションエクスプローラに戻ってコミットすることは何も」

git4

  • 共有ディレクトリにあるファイル(D:\project2\shared\some-shared-fileで参照してください)o例えばVisual StudioのutartはTortoise GITを使用しても動作しません。ファイルとディレクトリの両方であるというメッセージとともに失敗します。

    git6 git7

    上記は、プロジェクトのルートに存在するframeディレクトリが本当に接合である新しいテストプロジェクトで行われました。

    私の実際のプロジェクトでは状況は少し異なります...たとえばTortoise GITを使ってリポジトリをブラウズすると、実際にジャンクションに存在する共有ファイルが追跡され、チェックインされ、レポの一部として表示されます。しかし、すぐに私は、Visual Studioでプロジェクトを開くと、それが表示されるでしょうけれども、「削除保留中」として、ソリューションエクスプローラやチームエクスプローラの変更で同じファイル。これはVSの奇妙なことですか?

    最終的には、ディレクトリジャンクションに存在するファイルを通常のファイルと同じようにプロジェクトの一部として表示する方法を知りたいので、正しくチェックアウトしてチェックインしてフォームに戻すことができますプロジェクトの(repoの)歴史の一部?現時点では

答えて

3

が、これはサポートされていません。これは、Visual StudioとTortoiseGit(の一部)で使用されているのGitライブラリであるWindowsとlibgit2のためのGitの間の接合部の処理の間に解釈の違いによるものです。

両方の実装べきtreat junction points as if they are Unix mount pointsが、しかし、どちらの実装は、実際にが現在ことを行うことが決定されました。現時点では

、彼らは通常のディレクトリであるかのように、Windows用のGitはそれらを扱う(そしてそれはあなたの接合を削除し、新しいディレクトリに置き換える場合があります)。 libgit2はこれをシンボリックリンクのように扱い、結果としてVisual Studioはそれをまったく処理しません。

Microsoftはこの問題を解決するためのVisual Studioを更新する必要がありますので、Microsoft Connectでバグを報告し、それがVS 2015

+0

に固定されますことを期待して、それに投票する人を奨励してください明確な説明をありがとう!おそらく実用的な回避策をお勧めしますか?それとも、「共有」レポを作成し、それを手動でコミットする以外の方法はありませんか? –

+0

おそらくスイッチするためのいくつかのgitオプションがありますか?私はtrueとfalseでcore.symlinksを疲れましたが、それは何もしていないようです。 –

+0

私は本当の回避策は存在しないことを恐れている、あなたは、共有リポジトリを使用する必要が手動でコピーするか、またはアプローチのサブモジュールのタイプを使用します。 –

関連する問題