如何使 GIT 将目录连接视为 Windows 上的常规文件夹?

How to make GIT treat directory junctions as regular folders on 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,当项目包含 "junctioned" 目录中的文件时,Team Explorer 的行为会非常奇怪:

使用 Tortoise GIT 从 Visual Studio 外部显式添加驻留在共享目录中的文件(即通过 D:\project2\shared\some-shared-file 引用它)例如不起作用:添加失败并显示一条消息,它既是文件又是目录。

以上是用一个新的测试项目完成的,其中项目根目录中的 frame 目录实际上是一个连接点。

然而,在我的实际项目中,情况略有不同......如果我使用 Tortoise GIT 浏览回购协议,它实际上会显示驻留在连接点中的共享文件被跟踪和签入,并且回购协议的一部分。但是,一旦我在 Visual Studio 中打开项目,它就会在解决方案资源管理器和团队资源管理器更改中显示与 "pending delete" 相同的文件。那么这是 VS 怪癖吗?

所以最重要的是我只想知道如何使驻留在目录连接中的文件与常规文件一样被视为项目的一部分,以便正确地检出和检入它们构成项目(回购)历史的一部分?

目前暂不支持。这是由于 Git for Windows 和 libgit2 之间的连接处理之间的解释不同,libgit2 是 Visual Studio 和(部分)Tortoise 使用的 Git 库Git.

已决定这两种实现方式 应该 treat junction points as if they are Unix mount points,但是目前这两种实现方式实际上都

目前,Git for Windows 将它们视为普通目录(因此它可能会删除您的连接并用新目录替换它)。 libgit2 将其视为符号 link,因此 Visual Studio 根本拒绝处理它。

由于 Microsoft 需要更新 Visual Studio 来解决这个问题,请在 Microsoft Connect 提交错误并鼓励人们投票支持它,希望它能在 VS 2015 中得到修复。