簡體   English   中英

使用Windows上的Git將符號鏈接文件添加為文件

[英]Add symlink file as file using Git on Windows

我在git中有一個很大的(超過1000個文件)VS C#項目。 我需要創建一個小型演示項目並使用大項目中的十個文件。 為了創建這個新項目,我從大項目中添加了10個帶有mklink(符號鏈接)的文件到小項目。 大項目和小項目中相應文件的所有更改都是相同的。 現在我需要將小項目添加到另一個(我自己的)git倉庫。

但是符號鏈接不會添加git:

(錯誤:readlink(“X.cs”):函數未實現)

如何在git中添加X.cs(符號鏈接)文件作為常規文件?

我需要將X.cs中的所有更改(在大項目中)移動到X.cs(小項目)。

如果向索引添加符號鏈接失敗並顯示錯誤error: readlink("..."): Function not implemented ,請嘗試在本地或全局配置中查找此行:

[core]
    symlinks = false

您需要為成功推送設置symlinks = true 默認值(= true)如果參數不存在或工作不正常 ,則取決於創建存儲庫的設置。

硬鏈接不適用於GIT ,因為文件和硬鏈接存儲為單獨的文件。

它與git 2.8或更高版本相同(我沒有檢查小於2.8的版本)

目前的答案是過時的,需要根據最近的變化進行修訂。
給出的解決方案還不夠,無法正常工作。

Windows上最新的Git 2.12仍存在問題(2017年2月,OP提問后18個月)

在2015年所謂的git-new-workdir工作的背景下(能力,形成一個克隆,有多個工作樹:最終被稱為git worktree ),Git開發人員在詢問如何引用這些工作樹克隆的主要回購。
他們會使用ln嗎? 或其Windows等效的mklink

當時,這個主題強調了這些問題

在MinGW中的Windows上運行時,通過ln創建符號鏈接始終失敗。
使用mklink而不是ln是在Windows上創建鏈接的推薦方法

這可能是真的,但並不理想:“ Git Bash Shell無法創建符號鏈接 ”確實提到:

對於我的設置,這是在Windows 8.1上安裝的Git for Windows 2.11.0 export MSYS=winsymlinks:nativestrict執行此處所解釋的技巧: git-for-windows / pull / 156

以管理員身份啟動Git Bash shell非常重要,只有管理員才能創建符號鏈接 因此,為了使tar -xf工作並創建所需的符號鏈接:

  • 以管理員身份運行Git Bash shell
  • 運行export MSYS=winsymlinks:nativestrict
  • 運行tar

另請參閱“ Windows中的Git符號鏈接”,其中立即安裝(適用於Windows 2.10+的Git)包括符號鏈接支持:

符號鏈接

您需要在克隆期間指定:

git clone -c core.symlinks=true <URL> 

您的CMD會話需要以管理員身份運行。

毋庸置疑,對Windows用戶施加先決條件是不行的(企業中的Windows通常具有有限的權限或沒有權限提升)

然而, PR 156確實代表了對Gml For Windows 2.10(2016年9月)發布的符號鏈接的一些Windows支持。


它告訴git worktree最終實現了多個工作樹引用...... 依賴於符號鏈接,並使借方和借方意識到彼此。

完成鏈接的工作樹后,您只需刪除它即可。 存儲庫中工作樹的管理文件最終將被自動刪除(請參閱git config中的gc.pruneworktreesexpire),或者您可以在主工作樹或任何鏈接工作樹中運行git worktree prune來清理任何陳舊的管理文件。

那里沒有象征性的聯系。

Git在Windows上確實遇到了符號鏈接問題。 但是,我認為您甚至不需要符號鏈接來解決您的問題。 一個簡單的解決方法是編寫一個小的* .bat腳本,根據需要將有問題的文件從一個存儲庫復制到另一個存儲庫。 使用符號鏈接,您不需要運行腳本,這可以節省幾秒鍾,但是您會遇到一個問題,即您可能會意外地更改小存儲庫中的文件並在大型存儲庫中進行不必要的修改。

git在單個文件鏈接方面存在問題,但目錄符號鏈接(mklink / d)沒有問題。 因此,將您的圖像文件移動到大項目中的另一個目錄,並在您的git倉庫中創建目錄鏈接到此目錄。

見下面的例子。

P:\\ denemeler \\ gitdeneme1> mklink / d linkDirectory P:\\ puzzles

創建了符號鏈接:linkDirectory << === >> P:\\ puzzles

P:\\ denemeler \\ gitdeneme1> git status在分支主文件上未跟蹤文件:
(使用“git add ...”包含將要提交的內容)

  linkDirectory/ 

沒有添加到提交但未跟蹤的文件存在(使用“git add”跟蹤)

P:\\ denemeler \\ gitdeneme1> git add linkDirectory

P:\\ denemeler \\ gitdeneme1> git status

在分支主機上要提交的更改:(使用“git reset HEAD ...”來取消暫停)

  new file: linkDirectory/Juggle Fest Question.txt new file: linkDirectory/jugglefest.txt new file: linkDirectory/triangle.txt new file: linkDirectory/triangleQuestion.txt 

P:\\ denemeler \\ gitdeneme1> git commit -m“新文件”

[master 0c7d126]新文件4個文件已更改,14150個插入(+)創建模式100644 linkDirectory / Juggle Fest Question.txt創建模式100644 linkDirectory / jugglefest.txt創建模式100644 linkDirectory / triangle.txt創建模式100644 linkDirectory / triangleQuestion.txt

P:\\ denemeler \\ gitdeneme1> echo“aa”> p:\\ puzzles \\ newFile.txt

P:\\ denemeler \\ gitdeneme1> git status

在分支主要Untracked文件上:
(使用“git add ...”包含將要提交的內容)

  linkDirectory/newFile.txt 

沒有添加到提交但未跟蹤的文件存在(使用“git add”跟蹤)

看起來所有的simlink都位於一個ntfs分區中,如果是真的,你可以將所有simlinks更新為硬鏈接,通過一些腳本命令,mklink / h ...任何CVS的友情鏈接。

暫無
暫無

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

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