我需要共享才能在不同项目之间共享某些文件。因此,我有一个像这样的文件结构:
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:\project1
和D:\project2
中设置了GIT存储库。我的问题是GIT似乎只跟踪未连接的文件(即真实目录)。我对两个项目都使用Visual Studio 2015,并且当项目具有“连接”目录中的文件时,Team Explorer的行为将非常奇怪:
例如,使用Tortoise GIT从Visual Studio 外部显式添加驻留在共享目录中的文件(即通过
D:\project2\shared\some-shared-file
引用它)是行不通的:添加失败,并显示一条消息,它既是文件又是目录。以上是通过一个新的测试项目完成的,该项目的根目录中的
frame
目录实际上是一个结点。但是,在我的实际项目中,情况略有不同...例如,如果我使用Tortoise GIT浏览 repo 协议(protocol),它将实际上显示位于联结中的共享文件已被跟踪和检入以及 repo 协议(protocol)的一部分。但是,一旦我在Visual Studio中打开该项目,它将在解决方案资源管理器和团队资源管理器中将相同的文件显示为“待删除”。那么这是VS quirck吗?
因此,最重要的是,我只想知道如何使驻留在目录连接中的文件与常规文件一样被视为项目的一部分,以便将它们正确 check out 并重新 checkin 并形成项目的一部分( repo 的历史吗?
最佳答案
目前不支持此功能。这是由于Windows的Git与libgit2(这是Visual Studio和TortoiseGit(的一部分)使用的Git库)之间的结点处理的解释不同。
已经确定两个实现都应使用treat junction points as if they are Unix mount points,但是目前尚无一个实现。
目前,Git for Windows将它们视为普通目录(因此可能会将您的联结删除并替换为新目录)。 libgit2将此视为符号链接(symbolic link),因此,Visual Studio完全拒绝对其进行处理。
由于Microsoft需要更新Visual Studio来解决此问题,因此请在Microsoft Connect中提交一个错误,并鼓励人们投票支持它,希望它能在VS 2015中得到修复。
关于windows - 如何使GIT在Windows上将目录连接视为常规文件夹?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37930363/