如何使 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:\project1
和 D:\project2
中设置了 GIT 回购我的问题是 GIT 似乎只跟踪非连接(即真实目录)中的文件。
我对这两个项目都使用 Visual Studio 2015,当项目包含 "junctioned" 目录中的文件时,Team Explorer 的行为会非常奇怪:
- 将驻留在目录交界处的文件添加到项目后,团队资源管理器只会在要提交的更改列表中显示其父目录(交界处),而不是文件本身。
- 提交所有更改(即已添加文件)后,解决方案资源管理器显示 所有 文件被跟踪并签入(包括那些驻留在交汇处并且在添加后未显示在待定更改列表中的那些:
- 编辑显示为已签入且驻留在联结目录中的文件会使它看起来是已签出:
- 现在返回到团队资源管理器,检出文件显示在已修改文件列表中:
- 但是尝试提交失败并显示一条消息:"An error occurred. Detailed message: No changes; nothing to commit."
- 返回到解决方案资源管理器,提交失败的已更改文件仍然显示为已签入:
使用 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 中得到修复。
我需要共享才能在不同项目之间共享某些文件。因此我有一个像这样的文件结构:
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,当项目包含 "junctioned" 目录中的文件时,Team Explorer 的行为会非常奇怪:
- 将驻留在目录交界处的文件添加到项目后,团队资源管理器只会在要提交的更改列表中显示其父目录(交界处),而不是文件本身。
- 提交所有更改(即已添加文件)后,解决方案资源管理器显示 所有 文件被跟踪并签入(包括那些驻留在交汇处并且在添加后未显示在待定更改列表中的那些:
- 编辑显示为已签入且驻留在联结目录中的文件会使它看起来是已签出:
- 现在返回到团队资源管理器,检出文件显示在已修改文件列表中:
- 但是尝试提交失败并显示一条消息:"An error occurred. Detailed message: No changes; nothing to commit."
- 返回到解决方案资源管理器,提交失败的已更改文件仍然显示为已签入:
使用 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 中得到修复。