标签: git-submodules

Git 子模块正在变脏?

我只是将存储库作为子模块克隆到我的一个项目中。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-submodules

5
推荐指数
1
解决办法
1386
查看次数

Git子模块:将子模块移出存储库

通过键入创建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-submodules

5
推荐指数
2
解决办法
2624
查看次数

使用病原体和 git 子模块自定义 vim 包

我在不同的机器上使用 vim 并希望在它们之间保持我的配置同步,所以我尝试了使用pathogen安装不同 vim 插件的众所周知的方法,将它们作为 git 子模块保存,例如这里描述的。

现在我的.vim文件夹是一个 git repo,其中包含 .git 文件中的每个文件夹作为子模块.vim/bundle。我将该主存储库上传到 bitbucket 并从我的其他机器上克隆它,经过一段时间后git submodule initgit submodule update我根据需要在所有机器中获得了相同的配置。

现在,当我需要在其中一些插件中进行一些自定义时,问题就来了。例如,一些子模块只是 vim 颜色方案。假设我想改变,说评论的颜色。这样做的正确方法是什么?

我想到了一些想法:

  1. 如果我直接修改.vim/bundle/vim-github-colorscheme/colors(例如),那么 AFAIK,我应该将这些更改推送到主存储vim-github-colorscheme库,我不能,而且无论如何都是可笑的。我的定制本质上是私有的。但是如果我不与子模块 repo 同步,我的其他机器上将看不到这些更改。
  2. 如果我将自己的颜色方案自定义保留在.vim/colors. 此外,我不清楚如何以这种方式完成其他类型的自定义(例如,修改 snipMate 的一些片段,甚至修改插件的代码)
  3. 我应该制作插件的私有分支,将其上传到 bitbucket,并将其用作子模块而不是原始模块吗?这样至少我可以正确地执行 1. 中的方法,但它看起来不是一个好的选择。特别是因为我事先不知道是否需要自定义插件,所以这将迫使我为“以防万一”安装的每个新 vim 插件制作一个分支。
  4. 我可以将包的代码保存在单个 git 存储库下,即根本不使用子模块。这将使我可以自由地修改它们,将修改与我的 bitbucket 存储库同步,并使用单个git pull. 然而这样一来,当插件的原始来源发生变化时,将很难将其与我自己的修改合并。

我的想法用完了,而且由于某种原因,以上所有内容在我看来都是错误的。使用 git 和 pathogen 的人如何管理这种情况?

vim customization git-submodules pathogen

5
推荐指数
1
解决办法
940
查看次数

Git:将文件移动到现有子模块中

如何将主仓库中的文件和文件夹移动到现有子模块中?我能以某种方式保存历史吗?

git git-submodules

5
推荐指数
1
解决办法
884
查看次数

无法使用子模块推送 Git 存储库的提交

我最近将子模块“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 的子模块也可能相关。

感谢您提供的任何见解。

git github git-submodules git-commit

5
推荐指数
1
解决办法
4048
查看次数

如何在不丢失子模块的情况下压缩所有提交?

我喜欢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 git-submodules

5
推荐指数
1
解决办法
1023
查看次数

如何更改git子模块跟踪远程分支?

我使用以下命令添加子模块

git submodule add -b br1 [repo]

.gitmodules 文件有条目 branch=br1 。现在我想将分支切换到 br2。我可以进入子模块文件夹并切换分支,但这不会更新 .gitmodules 文件。

我怎么能做到这一点?

git git-submodules

5
推荐指数
1
解决办法
6103
查看次数

如何在合并时防止分离的HEAD?

如果操作将导致分离的HEAD,有没有办法配置Git拒绝合并?

我知道如何解决分离的HEAD,但我宁愿让git拒绝合并动作以完全避免分离的HEAD.

发生这种情况时会出现问题:

  1. 我正在develop主仓库中的一个分支上工作,我还在子模块库中进行了一些更改.该develop分支更新以匹配最新提交的子模块.
  2. 一位同事要合并developmaster,但忘记拉子模块master第一.这导致分离的HEAD.

git git-submodules

5
推荐指数
1
解决办法
99
查看次数

如何从更新中排除特定的git子模块?

我有.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 version-control git-submodules

5
推荐指数
1
解决办法
2264
查看次数

如果包含项目不在master分支上,则递归推送子模块将抛出“致命错误:src refspec必须命名一个引用”

我有一个带有三个子模块的git存储库。包含的存储库有两个分支masterdevelop。所有子模块只有一个分支– 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)。

有人知道这里出了什么问题以及如何进行递归推送吗?

git git-submodules

5
推荐指数
1
解决办法
372
查看次数