我需要共享才能在不同项目之间共享某些文件。因此,我有一个像这样的文件结构:

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,并且当项目具有“连接”目录中的文件时,Team Explorer的行为将非常奇怪:
  • 将驻留在目录连接中的文件添加到项目后,Team Explorer将仅在要提交的更改列表中显示其父目录(连接),而不在文件本身中显示。
  • 提交所有更改(即已添加文件)后,解决方案资源管理器将显示为已跟踪的所有文件,并已将 checkin (包括位于联结中且在未更改之前显示为而不是的文件)已添加:

  • windows - 如何使GIT在Windows上将目录连接视为常规文件夹?-LMLPHP
  • 编辑显示为已 checkin 并位于联结目录中的文件,将使其看起来像是已 checkout :

  • windows - 如何使GIT在Windows上将目录连接视为常规文件夹?-LMLPHP
  • 现在返回Team Explorer,已 check out 文件在已修改文件列表中显示为:

  • windows - 如何使GIT在Windows上将目录连接视为常规文件夹?-LMLPHP
  • 但是,尝试提交失败,并显示一条消息:“发生错误。详细消息:无更改;没有要提交的内容。”

  • windows - 如何使GIT在Windows上将目录连接视为常规文件夹?-LMLPHP
  • 返回到解决方案资源管理器,但提交失败的更改文件仍显示为 checkin :

  • windows - 如何使GIT在Windows上将目录连接视为常规文件夹?-LMLPHP

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

    windows - 如何使GIT在Windows上将目录连接视为常规文件夹?-LMLPHP
    windows - 如何使GIT在Windows上将目录连接视为常规文件夹?-LMLPHP

    以上是通过一个新的测试项目完成的,该项目的根目录中的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/

    10-11 22:30
    查看更多