Visual Studio GIT解决方案中的符号链接/链接文件

ogsagwnx  于 2023-05-07  发布在  Git
关注(0)|答案(1)|浏览(238)

我有一个文件结构如下:

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上的真实文件的符号链接
1.我可以简单地将D:\SharedCodeDir\codefile1.txt作为AddFile对话框中的链接添加到VS项目中。
1.我可以创建一个硬链接,这样D:\SharedCodeDir\codefile1.txtD:\Solution\Project\codefile1.txt将指向磁盘上的相同数据。这是最不希望的。
1.我可以在D:\Solution\ProjectD:\SharedCodeDir中创建一个文件夹symlink / junction,这样D:\Solution\Project\SharedCodeDir实际上是D:\SharedCodeDir中实际文件夹的symlink / junction

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

我想要的行为:
示例案例:1)假设codefile1.txt首先从VS编辑,作为解决方案1的一部分。那么它是承诺。2)然后,相同的codefile1.txt在其他程序中或从VS但从解决方案2中编辑(在这种情况下,它也在最后提交到解决方案2的repo)。3)现在,当我回到解决方案1时,VS / git应该提醒我自上次提交以来codefile1.txt发生了更改,并询问我想做什么。
现在,如果codefile1.txt没有在步骤1)中提交,也就是说,它被 checkout 但没有被签回,我应该能够在VS之外或从另一个解决方案中编辑它,它应该表现得像一个正常的链接文件(VS提醒我,如果文件在VS中打开并在外部被更改,则文件自打开以来已经更改)。然后,我应该将它作为使用该文件的解决方案的一部分提交,这样它将与所有最新更改一起提交到解决方案的存储库。
最后,在任何情况下,任何Git绑定的解决方案/ repo都不应该尝试用他们提交的最新版本替换D:\SharedCodeDir\codefile1.txt上的物理文件(如果它们不同)。它应该只提醒我文件不同以及我想做什么(用repo中的文件替换D:\SharedCodeDir\codefile1.txt,或者反过来)。
另外,我不希望D:\SharedCodeDir\codefile1.txt被Git本地复制到D:\SharedCodeDir\Solution\Project\codefile1.txt作为另一个物理文件。也就是说,D:\SharedCodeDir\Solution\Project\codefile1.txt应该始终是到D:\SharedCodeDir\codefile1.txt中的真实的文件的某种链接(如上面的备选方案1 - 4所述)。
那么,如何才能实现这种设置呢?
如果Git真的不可能,SVN或替代品怎么样?

pobjuy32

pobjuy321#

在我的情况下,与你的情况非常相似,我做了以下事情:
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.替换为Content.

相关问题