清理克隆上的git子模块的工作流程是什么?

bde*_*caf 16 git git-submodules

有关如何"本地"删除子模块的有用答案 - 如何删除子模块?

但是我有问题我在几台机器上克隆了我的仓库.两个我每个月只工作一到两次.因此,当我更新那些分支时虽然不再跟踪子模块,但文件仍然在工作分支上.git/modules.在不止一次的情况下,我偶然检查了一些.在其他情况下,由于存在这些不需要的文件/目录,我的构建失败.

我想我可以保留一个要删除的东西列表 - 但这似乎不对 - 另一个人会怎么做删除,我没有git之外的信息删除什么?

那么清理克隆的建议方法是什么?

更新

对我来说似乎是最新的git --version回报git version 2.18.0(2018-09-01).

我添加了一个可重现的例子.

建立

mkdir parent
cd parent 
git init
git submodule add https://github.com/jakesgordon/javascript-tetris.git
git commit -am add

cd ..
git clone parent clone
cd clone
git submodule update --init
Run Code Online (Sandbox Code Playgroud)

现在两个目录都包含带有签出文件的子模块javascript-tetris/. .gitmodules包含子模块.

当我做

cd parent
git rm javascript-tetris
git commit -am delete
Run Code Online (Sandbox Code Playgroud)

在父目录中,目录已经javascript-tetris消失,并且.gitmodules删除了该条目.但仍有一个人口稠密的.git/modules/javascript-tetris目录.

在克隆方面:

git pull
Run Code Online (Sandbox Code Playgroud)

发出警告:warning: unable to rmdir 'javascript-tetris': Directory not empty.目录仍然存在,也.git/modules/javascript-tetris仍然存在.

Sta*_*ble 10

这对你有帮助吗?

git clean -xfd
git submodule foreach --recursive git clean -xfd
git reset --hard
git submodule foreach --recursive git reset --hard
git submodule update --init --recursive
Run Code Online (Sandbox Code Playgroud)

更新

要删除子模块,您需要:

  • 从 .gitmodules 文件中删除相关部分。
  • 暂存 .gitmodules 更改 git add .gitmodules
  • 从 .git/config 中删除相关部分。
  • 运行 git rm --cached path_to_submodule (没有尾部斜杠)。
  • 运行 rm -rf .git/modules/path_to_submodule (没有尾部斜杠)。
  • 提交 git commit -m "已删除子模块"
  • 删除现在未跟踪的子模块文件 rm -rf path_to_submodule

    来源


Von*_*onC 8

有点像这个要点,您可以使用git clean在这些机器上开始工作会话:

git clean -xfdf
Run Code Online (Sandbox Code Playgroud)

如果你想先试运行,你可以使用该-n标志:

git clean -n -xfdf
Run Code Online (Sandbox Code Playgroud)

使用强制两次来清理包含.git子目录的目录:git clean -xfdf
我有一些纠结的子模块,仅用git clean -xfd.