使用git在两个位置创建相同的文件

使用git在两个位置创建相同的文件,git,visual-studio-2012,Git,Visual Studio 2012,我有一个库项目,它有一个相关的JavaScript文件,任何使用该库的网站都必须包含该文件 在源代码管理中,js文件属于库(正确)。但是,在运行/调试/更改应用程序时,使用库将文件视为属于web项目是非常方便的 在TFS中,我们通过将库的scripts目录重新映射到web项目的scripts目录来处理这个问题,这意味着在处理项目时,js文件实际上是web项目的一部分,而在分支/合并时它会跟随库 如何在git中执行类似操作? 使用构建脚本复制文件不是可行的解决方案。它会在调试时进行实时更改,因为它

我有一个库项目,它有一个相关的JavaScript文件,任何使用该库的网站都必须包含该文件

在源代码管理中,js文件属于库(正确)。但是,在运行/调试/更改应用程序时,使用库将文件视为属于web项目是非常方便的

在TFS中,我们通过将库的scripts目录重新映射到web项目的scripts目录来处理这个问题,这意味着在处理项目时,js文件实际上是web项目的一部分,而在分支/合并时它会跟随库

如何在git中执行类似操作?

使用构建脚本复制文件不是可行的解决方案。它会在调试时进行实时更改,因为它只会更新副本,或者只需要对整个应用程序进行一个小的更改就可以强制复制文件

使用“addaslink”也不是一个选项,因为web服务器没有读取项目文件,也不知道链接,在请求脚本时只返回404


该项目是在Visual Studio 2012中开发的,因此任何解决方案都必须与VS中的项目结构配合良好。

根据要使用该解决方案的项目数,您可以将文件添加到另一个项目中,但在“添加”对话框中,选择将文件添加为链接:


这将使文件保持在其原始位置,但将其视为解决方案的一部分(因此您可以对其执行内容|始终复制等操作),并且具有与源代码管理无关的优点

一种解决方法是使用ntfs硬链接

mklink /h aliasdir\script.cs realdir\script.cs
然后将
aliasdir
添加到
.gitignore
以防止git添加文件两次。该文件现在将仅位于一个位置(
realdir
),但可以从两个位置添加

缺点是每次克隆存储库时都必须创建硬链接,这不是一种可以签入的配置


我也尝试过先使用符号链接(
mklink
wihtout
/h
),但Cassini(ASP.NET开发服务器)没有遵循它们。

让库项目的Git存储库成为应用程序Git存储库的一个(或者,如果您愿意的话)怎么样,然后使用相对路径从应用程序中引用库的JavaScript文件?

不幸的是,这对脚本文件不起作用,因为web服务器不会看到链接,只会返回404作为脚本的任何请求。但是应该这样做吗?如果将脚本添加到项目中,并将其设置为Content/Copy Always,则应将其复制到输出文件夹中(这是我们在工作中管理所有配置文件的方式)。或者我可能误解了这个问题。这只会在构建时复制,使实时更改变得不可能(或者至少很难,必须同时编辑“真实”文件和副本。符号链接需要提升权限,但硬链接不需要提升权限(我认为这有点奇怪)。那么很好(即使我对硬链接很警惕)我看了这些,但没有成功(可能是因为我对git了解不够)。你能详细说明一下吗?库和应用程序都在同一个repo中(不能改变这一点,因为我使用git tfs,必须遵循团队其他成员在tfs中使用的设置)。如果lib和app需要保持在同一个repo中,那么你真的运气不佳,无法使用子模块。此外,对于Git for Windows,这也不是一个可行的选择(因为,正如你在自己的回答中所说,每次克隆repo时都必须创建链接)。因此,我目前没有其他(好的)想法。