我只是将存储库作为子模块克隆到我的一个项目中。Al 很好并且工作正常,但是当我这样做时,我突然收到了这条消息git status;
# 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: wp-content/plugins/advanced-custom-fields (untracked content
)
#
Run Code Online (Sandbox Code Playgroud)
如果我这样做,git diff我会得到以下信息:
-Subproject commit 486e51db9b6ce49114c897ed1893a208d2289a29
+Subproject commit 486e51db9b6ce49114c897ed1893a208d2289a29-dirty
Run Code Online (Sandbox Code Playgroud)
令人担忧的是 -dirty 的变化。这是什么意思?我如何解决它?我没有对存储库进行任何更改。但是 Dreamweaver 可能向其中添加了愚蠢的 _notes 文件夹。我试图删除它们,但仍然有同样的问题。这就是它变脏的原因吗?
如果我尝试并执行git add -A它仍然说我有未跟踪的内容。
有任何想法吗?
通过键入创建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'上的那个模块。
我在这里推理的错误是什么?
非常感谢!
我在不同的机器上使用 vim 并希望在它们之间保持我的配置同步,所以我尝试了使用pathogen安装不同 vim 插件的众所周知的方法,将它们作为 git 子模块保存,例如这里描述的。
现在我的.vim文件夹是一个 git repo,其中包含 .git 文件中的每个文件夹作为子模块.vim/bundle。我将该主存储库上传到 bitbucket 并从我的其他机器上克隆它,经过一段时间后git submodule init,git submodule update我根据需要在所有机器中获得了相同的配置。
现在,当我需要在其中一些插件中进行一些自定义时,问题就来了。例如,一些子模块只是 vim 颜色方案。假设我想改变,说评论的颜色。这样做的正确方法是什么?
我想到了一些想法:
.vim/bundle/vim-github-colorscheme/colors(例如),那么 AFAIK,我应该将这些更改推送到主存储vim-github-colorscheme库,我不能,而且无论如何都是可笑的。我的定制本质上是私有的。但是如果我不与子模块 repo 同步,我的其他机器上将看不到这些更改。.vim/colors. 此外,我不清楚如何以这种方式完成其他类型的自定义(例如,修改 snipMate 的一些片段,甚至修改插件的代码)git pull. 然而这样一来,当插件的原始来源发生变化时,将很难将其与我自己的修改合并。我的想法用完了,而且由于某种原因,以上所有内容在我看来都是错误的。使用 git 和 pathogen 的人如何管理这种情况?
我最近将子模块“C”添加到我的存储库“B”中,然后检查了子模块 C(我想包含在 B 中的该工具的先前版本)中的特定提交,然后提交 B 并尝试推送。我收到此错误:
$ git push --recurse-submodules=on-demand
Run Code Online (Sandbox Code Playgroud)
...
Everything up-to-date
The following submodule paths contain changes that can
not be found on any remote:
_submodules/C
Please try
git push --recurse-submodules=on-demand
or cd to the path and use
git push
to push them to a remote.
fatal: Aborting.
fatal: The remote end hung up unexpectedly
gitpub error: process git-shell failed with status 128
Run Code Online (Sandbox Code Playgroud)
我应该提到的是,我检出的 C 中的提交是无父/分离的(不知道为什么开发人员选择这样)。当我想在 B 中推送我的提交时,这似乎会导致问题。提到 B 也是超级项目 A 的子模块也可能相关。
感谢您提供的任何见解。
我喜欢How to squash all git commits into one? 中的答案?.
但是,如果我执行以下操作,我会遇到合并冲突:
git rebase --root -i
Run Code Online (Sandbox Code Playgroud)
与建议的采摘和壁球。
而且,当我失去了我的子模块(我有 5 个)时
rm -rf .git
git init
git add .
Run Code Online (Sandbox Code Playgroud)
压缩所有历史记录并将我的子模块保留在当前目录中的当前目录中的最有效方法是什么?
我使用以下命令添加子模块
git submodule add -b br1 [repo]
.gitmodules 文件有条目 branch=br1 。现在我想将分支切换到 br2。我可以进入子模块文件夹并切换分支,但这不会更新 .gitmodules 文件。
我怎么能做到这一点?
如果操作将导致分离的HEAD,有没有办法配置Git拒绝合并?
我知道如何解决分离的HEAD,但我宁愿让git拒绝合并动作以完全避免分离的HEAD.
发生这种情况时会出现问题:
develop主仓库中的一个分支上工作,我还在子模块库中进行了一些更改.该develop分支更新以匹配最新提交的子模块.develop到master,但忘记拉子模块master第一.这导致分离的HEAD.我有.gitmodules中的子模块列表.我想下载一个特定的子模块,即只有在配置文件中启用某个选项为true时才下载grpc.因为我的构建有时不需要grpc.所有子模块都在第三方目录中.所以.gitmodules就像:
[submodule "third-party/libzip"]
path = third-party/libzip
url = https://github.com/nih-at/libzip.git
[submodule "third-party/sqlite"]
path = third-party/sqlite
url = https://github.com/mackyle/sqlite.git
branch = sqlite-3.23.1
[submodule "third-party/grpc"]
path = third-party/grpc
url = https://github.com/grpc/grpc.git
Run Code Online (Sandbox Code Playgroud)
还有一种方法可以在执行命令时专门排除子模块:
git submodule update --init --recursive
Run Code Online (Sandbox Code Playgroud)
我想在子模块更新时排除grpc中的grpc和子模块.就像是:
git submodule update --init --recursive "exclude third-party/grpc"
Run Code Online (Sandbox Code Playgroud) 我有一个带有三个子模块的git存储库。包含的存储库有两个分支master和develop。所有子模块只有一个分支– master分支。
当包含的存储库位于master分支上时,git push --recurse-submodules=on-demand将按预期方式通过原点推送。包含项目及其子模块均被推送。
现在这是问题所在。当包含存储库在develop分支上时,通过推送时出现问题git push --recurse-submodules=on-demand。推送操作被取消,并显示错误消息。
这是我从git获得的完整输出:
$ git push --recurse-submodules=on-demand
fatal: src refspec 'refs/heads/develop' must name a ref
fatal: process for submodule 'Frameworks/OpenLearnWareClient' failed
Run Code Online (Sandbox Code Playgroud)
我可以通过首先手动推送每个子模块中的更改,然后推送包含的存储库来缓解此问题。但是,这非常繁琐,并且违反了的目的--recurse-submodules=on-demand。
这是我的.gitmodules文件:
[submodule "Frameworks/OpenLearnWareKit"]
path = Frameworks/OpenLearnWareKit
url = git@github.com:kaiengelhardt/OpenLearnWareKit.git
branch = master
[submodule "Frameworks/OpenLearnWareClient"]
path = Frameworks/OpenLearnWareClient
url = git@github.com:kaiengelhardt/OpenLearnWareClient.git
branch = master
[submodule "Frameworks/KEFoundation"]
path = Frameworks/KEFoundation
url = git@github.com:kaiengelhardt/KEFoundation.git
branch = master
Run Code Online (Sandbox Code Playgroud)
我正在使用git版本2.20.1(Apple Git-117)。
有人知道这里出了什么问题以及如何进行递归推送吗?