【问题标题】:Visual Studio GIT with Symlinks / Linked Files in Solution解决方案中带有符号链接/链接文件的 Visual Studio GIT
【发布时间】:2015-07-11 05:11:33
【问题描述】:

我的文件结构如下:

D:\SharedCodeDir\codefile1.txt
D:\SharedCodeDir\codefile2.txt
D:\SharedCodeDir\...
D:\Solution\Project\projectfile1.txt
D:\Solution\Project\projectfile2.txt
D:\Solution\Project\...

我需要在我的 VS 项目中包含 D:\SharedCodeDir\codefile1.txt 和其他“共享”文件。我有几个选择来完成这个:

  1. 我可以在D:\Solution\Project\ 中创建指向D:\SharedCodeDir\codefile1.txt 的符号链接,这样D:\Solution\Project\codefile1.txt 将真正成为指向D:\SharedCodeDir\codefile1.txt 中真实文件的符号链接

  2. 我可以简单地将D:\SharedCodeDir\codefile1.txt 作为“添加文件”对话框中的链接添加到我的 VS 项目中。

  3. 我可以创建一个硬链接,这样D:\SharedCodeDir\codefile1.txt 和D:\Solution\Project\codefile1.txt 将指向磁盘上的相同数据。这是最不希望的。

  4. 我可以在D:\Solution\Project 到D:\SharedCodeDir 中创建一个文件夹符号链接/连接,这样D:\Solution\Project\SharedCodeDir 确实是D:\SharedCodeDir 中真实文件夹的符号链接/连接

问题: 在Visual Studio 2013 / 2015 中,使用Microsoft Git 提供程序,我如何正确地将我的解决方案/项目添加到Git 源代码管理中,以及我必须设置的配置文件中的哪些git 属性,以便D:\SharedCodeDir 中的“共享”文件是否被正确计算(即被跟踪)?

我想要的行为:

示例案例: 1) 假设 codefile1.txt 作为解决方案 1 的一部分首先从 VS 编辑。然后它被提交。 2) 然后在其他程序中或从 VS 但从解决方案 2 中编辑相同的 codefile1.txt(在这种情况下,它最后也提交给解决方案 2 的存储库)。 3) 现在,当我回到解决方案 1 时,VS / git 应该提醒我 codefile1.txt 自上次提交以来发生了变化,并询问我想要做什么。

现在,如果codefile1.txt 未在步骤 1) 中提交,即它已签出但未重新签入,我应该能够在 VS 外部或从其他解决方案对其进行编辑,并且它应该表现为正常链接文件(如果文件在 VS 中打开并且已在外部更改,VS 会提醒我文件自打开后已更改)。然后,我应该将其作为使用该文件的解决方案的一部分提交,以便提交解决方案存储库的所有最新更改。

最后,在任何情况下,任何受 Git 绑定的解决方案/存储库都不应尝试将 D:\SharedCodeDir\codefile1.txt 处的物理文件替换为他们已提交的最新版本(如果它们不同)。它只会提醒我文件不同以及我想要做什么(将 D:\SharedCodeDir\codefile1.txt 替换为来自 repo 的文件,或者相反)。

另外,我不希望 D:\SharedCodeDir\codefile1.txt 被 Git 本地复制到 D:\SharedCodeDir\Solution\Project\codefile1.txt 作为另一个物理文件。也就是说,D:\SharedCodeDir\Solution\Project\codefile1.txt 应该始终是某种链接(如上面的备选方案 1-4 中所述)到D:\SharedCodeDir\codefile1.txt 中的真实文件。

那么我该如何实现这个设置呢?

如果 Git 确实无法实现,那么 SVN 或替代方案怎么样?

【问题讨论】:

  • 共享、固定、文件通常是个坏主意。它也可能会混淆 Visual Studio。如果你真的想要这个,请将共享的东西放在他们自己的存储库中,并使用 Visual Studio 中的“添加为链接”功能。
  • 或玩转子模块/子树(Visual Studio Tools for Git 不支持)。
  • 将共享文件放在他们自己的仓库中会有什么帮助?首先,我必须手动将它们签出和签入(而不是从我正在使用的解决方案中的 VS 执行),其次,根据设置,它们可能仍会添加到解决方案的存储库中。
  • 因为它会清楚地表明文件是共享的。它还允许对其进行独立版本控制。在不同存储库的不同版本中拥有相同的文件是等待发生的意外。

标签: git visual-studio svn version-control filesystems


【解决方案1】:

就我而言,与您的情况非常相似,我做了以下事情:

  1. 使用 Visual Studio 中的“添加为链接”在我的解决方案文件夹之外添加了文件。这些文件链接将放置在我的解决方案内的某个文件夹中。

就我而言,这些文件将与其他项目共享,因此每个项目都会执行下一步:

  1. 要将这些文件从 D:\SharedCode\*.cs 物理复制到 D:\MyProject\Shared*.cs,我编辑了 .csproj 文件并在 </Project>标签
<Target Name="CopyLinkedFiles" BeforeTargets="Build">
<Copy SourceFiles="%(Compile.Identity)" DestinationFiles="%(Compile.Link)" 
SkipUnchangedFiles="true" OverwriteReadOnlyFiles="true" Condition="'%(Compile.Link)'
!= ''" />
</Target>

因此,在这种情况下,所有文件夹都将在共享文件的最新副本上运行,但 git 仍会将它们视为特定项目的一部分。

注意:如果您需要链接内容文件(资源,.txt..)而不是编译文件(.cs),请将 Compile. 替换为 内容。在上面的代码中

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-30
    • 1970-01-01
    • 2010-10-10
    • 2010-10-15
    • 1970-01-01
    • 1970-01-01
    • 2015-06-08
    相关资源
    最近更新 更多