簡體   English   中英

如何更改 git 子模塊以指向子文件夾?

[英]How to change a git submodule to point to a subfolder?

瀏覽SubModule 教程后,我從boto 項目創建了一個子模塊。 然后,我發現我實際上只需要這個項目的一個子集——特別是boto文件夾。

我想更改我的子模塊以指向此文件夾。 當我查看 .gitmodules 時,我看到

[submodule "backup/src/boto"]
    path = backup/src/boto
    url = https://github.com/boto/boto.git

我應該使用什么 URL 而不是https://github.com/boto/boto.git 我改完URL后,是不是要把本地的boto文件夾刪掉,重新拉取?

恐怕子模塊的 URL 總是只指向存儲庫 - 您不能指定只想要存儲庫的子文件夾,就像 git 通常不支持“窄克隆”一樣。

如果您無法忍受將整個存儲庫作為子模塊,您始終可以創建一個從 boto 克隆的新存儲庫,然后設置一個 cron 作業:

  1. git fetch將該存儲庫git fetch到目錄中
  2. 使用git filter-branch更新子目錄位於頂級的分支。
  3. 將存儲庫的該分支添加為子模塊。 然而,這有點繁瑣,我更喜歡將整個存儲庫作為子模塊。

您不能只克隆存儲庫的一部分。 這是因為混帳對待庫作為一個整體對象:當你得到它,你會得到這一切

因此,這里的解決方案是在另一個目錄中獲取子模塊,然后使用符號鏈接來實現您的目標。

您想要做的是在子模塊中創建一個分支並將文件夾向上移動並刪除您不需要的內容。 然后,您可以改為管理該分支。 如果您想推動您的更改,您應該能夠首先返回合並。 Git 會知道您移動了文件並成功進行了合並。

希望這可以幫助。

這里的所有答案都已經過時了。 您可以在此處使用更新的git sparse-checkout命令文檔,以及本文中的更多示例來獲取 repo 的片段。 如果您只需要較大的 git 項目中的一兩個目錄,這將很有效。

TLDR:

git sparse-checkout init --cone
git sparse-checkout set <dir1> <dir2> ...
git checkout main

暫無
暫無

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

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