簡體   English   中英

解決方案中帶有符號鏈接/鏈接文件的 Visual Studio GIT

[英]Visual Studio GIT with Symlinks / Linked Files in Solution

我有一個文件結構如下:

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真實文件的符號鏈接D:\\SharedCodeDir\\codefile1.txt

  2. 我可以簡單地將D:\\SharedCodeDir\\codefile1.txt作為“添加文件”對話框中的鏈接添加到我的 VS 項目中。

  3. 我可以創建一個硬鏈接,這樣D:\\SharedCodeDir\\codefile1.txtD:\\Solution\\Project\\codefile1.txt都將指向磁盤上的相同數據。 這是最不希望的。

  4. 我可以在D:\\Solution\\ProjectD:\\SharedCodeDir創建一個文件夾符號鏈接/連接,這樣D:\\Solution\\Project\\SharedCodeDir真的是一個符號鏈接/連接到D:\\SharedCodeDir的真實文件夾

問題:在Visual Studio 2013 / 2015 ,使用 Microsoft Git 提供程序,如何將我的解決方案/項目正確添加到 Git 源代碼管理中,以及配置 gile 中的哪些 git 屬性(如果有)我必須設置,以便我的“共享”文件在D:\\SharedCodeDir中是否正確計算(即被跟蹤)?

我想要的行為:

示例案例:1) 假設作為解決方案 1 的一部分,首先從 VS 編輯codefile1.txt 。然后提交。 2)然后在其他程序或VS中編輯相同的codefile1.txt ,但來自解決方案2(在這種情況下,它最后也提交到解決方案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 ,或者相反)。

另外,我不希望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 或替代方案如何?

就我而言,與您的情況非常相似,我執行了以下操作:

  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 仍會將它們視為特定項目的一部分。

注意:如果您需要鏈接內容文件(Resources、 .txt..)而不是編譯文件( .cs),請替換編譯。 內容。 在上面的代碼中

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM