具有修改和未跟踪内容的git子模块 - 为什么以及如何删除它?

Nil*_*ann 51 git

这就是我git status的结果:

# On branch master
# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#   (commit or discard the untracked or modified content in submodules)
#
#   modified:   vim/bundle/pathogen (modified content)
#   modified:   vim/bundle/sparkup (untracked content)
#
no changes added to commit (use "git add" and/or "git commit -a")
Run Code Online (Sandbox Code Playgroud)

跑步git diff vim显示这个:

diff --git a/vim/bundle/pathogen b/vim/bundle/pathogen
--- a/vim/bundle/pathogen
+++ b/vim/bundle/pathogen
@@ -1 +1 @@
-Subproject commit fcf77f5101f3e589ce006c40ad3a0432735a05cf
+Subproject commit fcf77f5101f3e589ce006c40ad3a0432735a05cf-dirty
diff --git a/vim/bundle/sparkup b/vim/bundle/sparkup
--- a/vim/bundle/sparkup
+++ b/vim/bundle/sparkup
@@ -1 +1 @@
-Subproject commit 04a81b41f116a19184359a6f8685c192f5c36c70
+Subproject commit 04a81b41f116a19184359a6f8685c192f5c36c70-dirty
Run Code Online (Sandbox Code Playgroud)

为什么一个未跟踪,另一个修改,差异是什么意思?但最重要的是:它是如何发生的以及如何摆脱它?

Mar*_*air 59

其中一个跟踪文件vim/bundle/pathogen已被修改.子模块中还有一些未跟踪(和未标记)的内容vim/bundle/sparkup.在任何一种情况下,找出修改/未修改内容的方法是更改​​到子模块目录并运行git status.(对于子模块中未跟踪的文件,这通常是尚未.gitignore在上游添加的构建产品.)

  • +1关于`更改到子模块目录`! (25认同)

cia*_*tek 48

添加ignore = dirty到repo根目录下的文件中的每个有问题的submodule部分.gitmodules.例:

[submodule "vim/bundle/nerdtree"]                                               
  path = vim/bundle/nerdtree                                                    
  url = https://github.com/scrooloose/nerdtree.git                              
  ignore = dirty
Run Code Online (Sandbox Code Playgroud)

正如NilsH所见,如何忽略git子模块的变化.感谢同步插件与git子模块和病原体 vimcast.


Mau*_*zio 25

进入子模块的目录,确保没有任何内容(某种输出)没有你知道.

cd submoduledir/
git status
Run Code Online (Sandbox Code Playgroud)

如果您在此处看到任何未跟踪的文件,请执行此操作以删除它们:

git reset --hard HEAD
git clean -fxd
Run Code Online (Sandbox Code Playgroud)

  • 我发现即使未跟踪的文件实际上并不存在于磁盘上,Git 似乎也表现得像它们一样。我不知道为什么会发生这种情况,但是按照您的示例使用 clean 命令有效。 (2认同)
  • 感谢您删除.gitignore下的所有内容.现在我的整个IDE配置和供应商缓存都消失了......注意这将删除所有.gitignore'd (2认同)

blo*_*ero 8

如果你真的确定你只想这样做(我正在管理带有病原体和 git 子模块的 vim 包,以及我如何设法在 repos 中获取一些标签文件夹 - 他们只是不得不去)你可以循环遍历子模块和删除未跟踪的文件。

cd YOUR_REPO_WITH_SUBMODULES/
git submodule foreach git clean -f -d
Run Code Online (Sandbox Code Playgroud)

-f强制,-d删除目录

您可以在此处查看文档:https : //git-scm.com/docs/git-clean


Fra*_*con 8

我遇到了同样的情况:

gogzelong:shadowsocks-android gogzelong$ git status 在分支 master 你的分支是最新的'origin/master'。

未为提交暂存的更改:(使用“git add ...”更新将提交的内容)(使用“git checkout -- ...”放弃工作目录中的更改)(提交或丢弃未跟踪或修改的内容子模块)

    modified:   core/src/main/jni/badvpn (modified content)
    modified:   core/src/main/jni/libancillary (modified content)
    modified:   core/src/main/jni/libevent (modified content)
    modified:   core/src/main/jni/redsocks (modified content)
    modified:   core/src/overture/src/github.com/shadowsocks/overture (modified
Run Code Online (Sandbox Code Playgroud)

内容)

未向提交添加任何更改(使用“git add”和/或“git commit -a”)

当我 git diff 看看有什么变化时:

gongzelong:shadowsocks-android gongzelong$ git diff
diff --git a/core/src/main/jni/badvpn b/core/src/main/jni/badvpn
--- a/core/src/main/jni/badvpn
+++ b/core/src/main/jni/badvpn
@@ -1 +1 @@
-Subproject commit 58f8a8883e51e5cb97391c4b6733ce255bf11f95
+Subproject commit 58f8a8883e51e5cb97391c4b6733ce255bf11f95-dirty
diff --git a/core/src/main/jni/libancillary b/core/src/main/jni/libancillary
--- a/core/src/main/jni/libancillary
+++ b/core/src/main/jni/libancillary
@@ -1 +1 @@
-Subproject commit 311e5d14f593f16c785bc6605220517eb1f21f6b
+Subproject commit 311e5d14f593f16c785bc6605220517eb1f21f6b-dirty
diff --git a/core/src/main/jni/libevent b/core/src/main/jni/libevent
--- a/core/src/main/jni/libevent
+++ b/core/src/main/jni/libevent
@@ -1 +1 @@
-Subproject commit f29f07bc8c43eec96f227e6f6eede32b3af66168
+Subproject commit f29f07bc8c43eec96f227e6f6eede32b3af66168-dirty
diff --git a/core/src/main/jni/redsocks b/core/src/main/jni/redsocks
--- a/core/src/main/jni/redsocks
+++ b/core/src/main/jni/redsocks
@@ -1 +1 @@
-Subproject commit 274334f14839431ae003774d99c3d1de337afff4
+Subproject commit 274334f14839431ae003774d99c3d1de337afff4-dirty
diff --git a/core/src/overture/src/github.com/shadowsocks/overture b/core/src/overture/src/github.com/shadowsocks/overture
--- a/core/src/overture/src/github.com/shadowsocks/overture
+++ b/core/src/overture/src/github.com/shadowsocks/overture
@@ -1 +1 @@
-Subproject commit a9b5a94e215c1beadfe11442994b550e1e81f8d6
+Subproject commit a9b5a94e215c1beadfe11442994b550e1e81f8d6-dirty
Run Code Online (Sandbox Code Playgroud)

我是这样修复的:

gogzelong:shadowsocks-android gogzelong$ git submodule update --init gogzelong:shadowsocks-android gogzelong$ git submodule foreach git reset --hard 进入'core/src/main/jni/badvpn'

HEAD 现在位于 58f8a88 修复错误 UDP 校验和计算。进入'core/src/main/jni/libancillary' HEAD 现在在 311e5d1 Fix C++ building 进入'core/src/main/jni/libev' HEAD 现在在 5213419 Merge pull request #2 from Mygod/master Entering 'core/ src/main/jni/libevent' HEAD 现在在 f29f07bc 更新到 2.1.8 输入'core/src/main/jni/libsodium' HEAD 现在在 c5e43f4c 更新 dotnet 示例版本输入'core/src/main/jni/mbedtls ' HEAD 现在位于 4f0929189 将版本号更新为 2.6.1 进入 'core/src/main/jni/pcre' HEAD 现在位于 222bbf4 合并“pcre:使无趣的警告静音”。am: 0e44fd55f8 Entering 'core/src/main/jni/redsocks' HEAD 现在在 274334f 使用标准 ANDROID 预处理器宏 (#1) 输入 'core/src/main/jni/shadowsocks-libev' HEAD 现在位于 57e74ea 修复绕过输入 'core/src/overture/src/github.com/shadowsocks/overture' HEAD 的错误现在在 a9b5a94 格式化源代码 gogzelong:shadowsocks-android gongzelong$ gogzelong:shadowsocks-android gogzelong$ git status 在分支 master 你的分支是最新的'origin/master'。

没有什么可提交的,工作树干净

参考:git-discard-submodule-changes