解决方案:--cached从中删除git rm -r --cached submodule/name. 脚本供参考.
我正在尝试根据此SO答案删除git子模块,但子模块未被删除.
我添加子模块,提交更改,然后使用git rm -r --cached $path/to/submodule(减去尾随/)删除它,提交更改,但子模块仍然存在.
我可以rm -rf submodules/lift_sbt_24用来删除文件夹和内容,但为什么不git rm -r --cached这样做呢?
(从.gitmodules删除相关部分工作正常,没问题,因此这里没有提到)
这是Ubuntu 11.10上的git 1.7.5.4,fwiw.完整的例子:
$> git submodule add git@github.com:lift-stack/lift_24_sbt.git submodules/lift_24_sbt
Adding submodule from repo git@github.com:lift-stack/lift_24_sbt.git as submodules/lift_24_sbt
Cloning into submodules/lift_24_sbt...
remote: Counting objects: 619, done.
remote: Compressing objects: 100% (375/375), done.
remote: Total 619 (delta 172), reused 593 (delta 147)
Receiving objects: 100% (619/619), 1.74 MiB | 112 KiB/s, …Run Code Online (Sandbox Code Playgroud) 好的,我们有一个包含 3 个子模块的存储库。现在我们想将此子模块合并回主存储库,保留所有历史记录(好吧,使用子模块比有用更令人头疼)。我们该如何进行?
你好,我已经成功重写了历史记录,并获得了我想要提取的 5 个文件夹git filter-branch -f --prune-empty --tree-filter 'rm -rf <all unwanted dirs>',并保留了所有 git 历史记录。
唯一剩下的问题是子模块,我仍然有提交
Subproject commit <hash>
我想从我的 git 历史记录中完全删除所有这些子模块提交,我该如何实现这一点?
当您向 git 项目添加子模块时 - 它会添加一个 gitmodules 文件并拉下实际的子模块并将其存储在您的项目中。
我是否需要提交下拉的实际子模块,还是只提交描述子模块路径的 gitmodules 文件更好?
最近Git的更改改变了.git使用子模块时目录的处理方式..git现在,所有内容都位于"根级别" .git目录(与包含子模块的工作副本相对应的目录)中,而不是每个子模块有一个.
然后,在每个子模块中,创建一个指向.git目录新位置的文件.
在我的项目中,我有以下.gitmodules文件:
[submodule "tests/shared-tests"]
path = tests/shared-tests
url = git://github.com/roboptim/roboptim-shared-tests.git
[submodule "cmake"]
path = cmake
url = git://github.com/jrl-umi3218/jrl-cmakemodules.git
Run Code Online (Sandbox Code Playgroud)
当我这样做时git clone --recursive,我获得:
$ cat cmake/.git
gitdir: /home/moulard/profiles/default-x86_64-linux-ubuntu-12.04.1/src/unstable/roboptim/roboptim-core/.git/modules/cmake
Run Code Online (Sandbox Code Playgroud)
我目前正在使用Git 1.8.1.5.
我的问题是:
请注意,这是不一样的前一个问题移动包含子模块一个Git仓库的父目录在这个意义上,我肯定这不是一个绝对路径在我的存在相关的问题.gitmodules的文件.
我有一个存储库,它有两个子模块.当我跑步时Git抱怨,git submodule init或者git submodule update出现以下错误:
致命:在.gitmodules中找不到路径'AppName.xcodeproj/..供应商/ AFNetworking'的子模块映射
我的子模块并不都在同一个目录中,我决定清理该项目.我曾经有一个目录Vendor,其中包含一些我的子模块,但我按照这里的指示从git中删除子模块.然后,我在一个名为的新目录中重新添加了子模块submodules.
我的一个子模块是AFNetworking库,我在初始Vendor目录中添加了一个子模块.我不久前删除了它并重新添加它作为清理过程的一部分.该应用程序似乎构建得很好,我的git submodule命令正常工作.现在,当我在另一台机器上结账时,它会失败,如上所述.
我的.gitmodules文件看起来像这样:
[submodule "submodules/AFNetworking"]
path = submodules/AFNetworking
url = https://github.com/AFNetworking/AFNetworking.git
[submodule "submodules/LNPopupController"]
path = submodules/LNPopupController
url = https://github.com/MosheBerman/LNPopupController.git
Run Code Online (Sandbox Code Playgroud)
这看起来很正常,因为git知道我的模块在哪里,而且一切都应该很好.我的.git/config文件也是如此:
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
ignorecase = true
precomposeunicode = true
[remote "origin"]
url = git@github.com:MosheBerman/theshmuz.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
merge = …Run Code Online (Sandbox Code Playgroud) 我有一个包含许多子模块的项目,我试图使它们充当普通文件夹而不是存储库。我已经删除了.git/每个文件夹中的文件夹,但它们仍然像子模块一样,当我运行 a 时,git status它们似乎没有显示为未跟踪的文件。
通过键入创建git子模块后
git submodule add <repo> && git submodule init
Run Code Online (Sandbox Code Playgroud)
我的.git / config已更改,并创建了一个新文件.gitmodules。看来我可以将子模块移动到存储库内以及存储库外的特定文件夹中:
$ cat gitmodules
[submodule "sub_repo"]
path = sub_repo
url = <...>
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试将存储库移至父文件夹并更改.gitmodules时
path = ../sub_repo
Run Code Online (Sandbox Code Playgroud)
似乎忽略了'git update'或'git submodule foreach'上的那个模块。
我在这里推理的错误是什么?
非常感谢!
好像我有一个丢失的树错误。公平地讲,我完全只是在git上弄乱了我的本地文件,并且受够了,在回购协议上做了完整的硬盘删除,并从远程主服务器重新克隆了。现在,我收到以下错误。我要做的第一件事就是为我的工作创建一个本地分支。
如果我不删除所有内容,而是通过时态,我很有可能恢复很多工作,对吗?(这可能也显示了我现在在git和项目中的状态……)
如果有什么不同,我在做一个android项目。
我正在阅读 这篇文章,它似乎很有帮助,但是我不知道如何找到我的“ a30df1173f14dea24df661f1eef749fed2f4e1ed” sha1哈希。
在做
git ls-tree a30df1173f14dea24df661f1eef749fed2f4e1ed
给我以下
100755 blob 2851ba4fdf2a134f8fc97fd60b3045b73cd6039b .DS_Store
100755 blob 3f9691c5dda29b09cb96060fd6ec7017f6c671d2 .classpath
100755 blob c50d3b4fe2f6221db617840561dc94d7690bb883 .gitignore
100755 blob 6b58f1723a252cfd314d108fadac4b71a4209c1c .project
100755 blob 39f00018845d776de324707090d26c5153720e22 AndroidManifest.xml
100755 blob 94a9ed024d3859793618152ea559a168bbcbb5e2 COPYING
100755 blob c1853e4c312a938d5890f5f4e0844782429ba11e default.properties
040000 tree 423accda532f8788f916b26b863ddf32e2896aa6 docs
160000 commit 0000000000000000000000000000000000000000 eagle vision
100755 blob 424f2604203eabd2310165b143b430326aa87ee7 ic_launcher-web.png
040000 tree 2b83cd828cd11a11e84a2d8f646dfa40de109827 libs
100644 blob 8a7b1fac8f8c12e925e56776f225730c4712f92a lint.xml
040000 tree c0182f719fccf5fc8b0d7658c3d15fe4deac0d9e plugins
100755 blob f2fe1559a217865a5454add526dcc446f892385b proguard-project.txt
100755 blob 9ae01de96458dbded45d2a442c09c0f4d33e473a project.properties
040000 tree 3c9446b3bb23eebe80942992ee03e01a7390ba80 res
040000 tree …Run Code Online (Sandbox Code Playgroud) 所以,如果我做一个git状态,我得到:
bsg-integration> git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes not staged for commit:
(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: bsg-services (untracked content)
no changes added to commit (use "git add" and/or "git commit -a")
Run Code Online (Sandbox Code Playgroud)
然后我尝试使用git add .,git add -u但是当我使用时我仍然会得到同样的东西git status.发生了什么以及如何将此文件夹推送到github?在我的github repo上,文件夹bsg-services显示为灰色文件夹.这是什么意思?谢谢!