簡體   English   中英

Git 子模塊是獨立的存儲庫嗎?

[英]Is a Git submodule an independent repository?

當我查看我的 Git 存儲庫時,我可以看到主存儲庫中有一個 .git 文件夾。 然后,當我進入子模塊時,我可以看到沒有名為 .git 的文件夾,但有一個名為 .git 的文件。 為什么會有這種差異?

如果子模塊是一個像主存儲庫一樣的實際存儲庫並且可以基本上獨立於主存儲庫進行工作,那么兩者是否都應該有一個 .git 文件夾或者都有 .git 文件而不應該像這樣不同?

子模塊的 git 存儲目錄存儲在主存儲庫的.git/目錄中。

您可以在.git/modules/下找到它們:

ls .git/modules

是的,每個子模塊都是它自己獨立的存儲庫。

在早期的git submodule中有一段時間是這樣的:超級項目和每個子模塊都有自己的.git文件夾。 后來決定所有與git相關的文件都應該存儲在一個.git目錄下,即使是子模塊也是如此。 所以git submodule了一個子命令git submoduleabsolutegitdirs ,它將模塊的.git目錄移動到超級項目的.git/modules/並留下一個文件.git指向超級項目的.git/modules/

git clone --recursive執行(移動到超級項目的.git/modules/ )。

是的,每個 Git 子模塊都是一個獨立的存儲庫。 您所看到的稱為 gitlink,它是一種使.git內容指向其他地方的方法。 最初的想法是為此使用符號鏈接,但 Windows 需要提升權限或特殊設置才能使用符號鏈接,因此 Git 不得不使用 gitlinks。

您想對子模塊使用 gitlinks 的原因是因為它可以更輕松地取消初始化子模塊(即刪除其內容)而不會破壞其歷史記錄。 如果你有gitlink,那么只要子模塊的工作樹是干凈的,去初始化它本質上只是目錄上的一個rm -fr ,非常方便。 此外,因為人們有時會使用子模塊來做到這一點,這意味着他們並沒有意外地破壞他們的歷史。

如果需要,仍然可以使用單獨的.git目錄,但通常沒有充分的理由這樣做,除非出於某種原因您的子模塊位於單獨的掛載點上。

如果要查找存儲庫的實際 Git 目錄,請執行以下操作: git rev-parse --git-dirgit rev-parse --absolute-git-dir

暫無
暫無

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

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