[英]How I deal with Visual Studio solution and project files in 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
和其他“共享”文件。 我有幾種選擇來實現這一點:
我可以在D:\\Solution\\Project\\
創建一個指向D:\\SharedCodeDir\\codefile1.txt
的符號鏈接,這樣D:\\Solution\\Project\\codefile1.txt
將真正成為D:\\SharedCodeDir\\codefile1.txt
真實文件的符號鏈接D:\\SharedCodeDir\\codefile1.txt
我可以簡單地將D:\\SharedCodeDir\\codefile1.txt
作為“添加文件”對話框中的鏈接添加到我的 VS 項目中。
我可以創建一個硬鏈接,這樣D:\\SharedCodeDir\\codefile1.txt
和D:\\Solution\\Project\\codefile1.txt
都將指向磁盤上的相同數據。 這是最不希望的。
我可以在D:\\Solution\\Project
到D:\\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 或替代方案如何?
就我而言,與您的情況非常相似,我執行了以下操作:
就我而言,這些文件將與其他項目共享,因此每個項目都將執行下一步:
</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.