簡體   English   中英

如何從本地工作目錄中刪除所有未跟蹤的子模塊?

[英]How to remove all untracked submodules from local working directory?

在我的項目中,我正在研究兩個分支(開發和發行),每個分支都充分利用了子模塊。 Develop分支使用的子模塊大約是Release的兩倍,因為它是我們測試思想的地方。

當我將分支從Develop切換到Release時,特定於Develop的子模塊的目錄保留在原位置,因此它們不會被跟蹤。 這讓我有些困惑,因為有時候我確實確實需要從Release中添加或刪除子模塊,並且git status消息變成一長串未跟蹤的模塊,其中一些我想使用,有些我不想使用。

我想做的是,從開發切換到發布后,立即從項目中刪除所有未跟蹤的子模塊,以便使用“干凈的平板”(即,工作目錄中沒有未跟蹤的子模塊)。

我找到了一次刪除單個子模塊的幾種解決方案,例如:這里: 如何刪除一個子模塊?

但是,像這樣的解決方案假定git子模塊正在使用和被跟蹤(它們沒有被使用),並且當我使用15-20之類的方法時,一次將其刪除也很麻煩。子模塊。

我也嘗試過管道Linux命令,如下所示:

git ls文件-其他-排除標准| rm -rf

但是該命令似乎無能為力。 我也嘗試將其與git rm -rf一起使用,但無濟於事。

有誰知道是否可以輕松地從工作目錄中刪除所有未跟蹤的git子模塊? 任何人可以就此事分享的任何建議,將不勝感激。 謝謝!

在評論部分中有幫助的人的建議下,我確定沒有明顯,乏味的解決方案。 相反,我創建了一個bash腳本來為我完成工作。 這是萬一其他人遇到相同問題的情況:

#!/bin/bash

clear
git ls-files --others --directory --exclude-standard
echo
read -r -p "Are you sure you want to remove these untracked submodules? [y/N] " response
if [[ $response =~ ^([yY][eE][sS]|[yY])$ ]]
then
    git ls-files --others --directory --exclude-standard | while read line; do
    rm $line/.git &> /dev/null;
  done
  git clean -d  -f
fi

對於不熟悉Bash腳本的人們的簡單步驟:

步驟1:將以上腳本復制到文件中,並將其命名為“ cleanUSM”。 將文件保存到/ usr / bin。 如果您在保存它或查找/ usr / bin時遇到麻煩,只需將其保存到當前目錄,然后使用'sudo mv cleanUSM / usr / bin / cleanUSM'將其放在需要的位置。

步驟2:在您的根目錄中,運行命令'cleanUSM'

感謝所有貢獻者!

暫無
暫無

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

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