我有个混上层项目引用几个子系统和我想锁下一个工作流程的其余项目的成员的工作内。

对于这个问题,可以说我的上层项目被称为 supery 和子模块被称为 subby.(然后是简化什么我想要做的...我不是实际使用的分支机构的版本,但我认为这将是最简单奠定了作为一个问题。)

我的主人的分支 supery 具有标签 v1.0 内项目 subby 引用作为一个子模块。该分支机构的 superyone.one 并改变了参考的模块指标签 v1.1subby.

我可以在每个分支机构顺利,但是,如果我尝试更新 one.one 分配的变更 master 支我收到一些冲突和我不如何解决这些问题。

基本上运行之后一个 git pull . master 虽然在 subby 分支,它看起来像它创造了额外的子模块。

之前的拉/合并,我得到想要的答复 git submoduleone.one 分支机构:

$ git checkout master
$ git submodule
qw3rty...321e subby (v1.0)
$ git checkout one.one
$ git submodule
asdfgh...456d subby (v1.1)

但后拉,这增加了额外的子当我运行 git submodule:

$ git pull . master
Auto-merged schema
CONFLICT (submodule): Merge conflict in subby - needs qu3rty...321e
Automatic merge failed; fix conflicts and then commit the results.

$ git submodule
qw3rty...321e subby (v1.0)
asdfgh...456d subby (v1.1)
zxcvbn...7890 subby (v1.1~1)

我怎么删除或忽略不需要的模块参考文献,并承诺我的冲突和改变?或者是有一个参数我可以用我的原始 git pull 这将会忽略我的子?

有帮助吗?

解决方案

之前我没有看到过那个确切的错误。但我猜你遇到的麻烦。看起来是因为 supery master one.one 分支包含 subby 子模块的不同引用,当合并来自 master 的更改git不知道哪个ref - v1.0 v1.1 - 应由 supery 的一个分支。

如果是这种情况,那么您需要选择所需的ref并提交该更改以解决冲突。这正是您使用 reset 命令所做的。

在项目的不同分支中跟踪子模块的不同版本是一个棘手的方面。但子模块ref与项目的任何其他组件一样。如果两个不同的分支在连续合并之后继续跟踪相同的相应子模块refs,那么git应该能够计算出模式而不会在将来的合并中引发合并冲突。另一方面,如果经常切换子模块,你可能不得不忍受大量的冲突解决。

其他提示

嗯,它在技术上没有管理与子模块的冲突(即:保留这个而不是那个),但我找到了继续工作的方法......而我所要做的就是关注我的 git status 输出并重置子模块:

git reset HEAD subby
git commit

这会将子模块重置为预拉提交。在这种情况下,这正是我想要的。在其他我需要应用于子模块的更改的情况下,我将处理那些具有标准子模块工作流程(结账主数据,下拉所需标签等)。

我努力一点的答案在这个问题上并没有多少幸运的答案 类似这样的后 任。因此,这是我的工作对我来说-铭记在我的情况下,该模块是通过保持一个不同的团队,这样的冲突来自不同的子模版本中的主人和我的当地分支机构的项目,我是在努力:

  1. 运行 git status -做一个注意到文件夹子模块的冲突
  2. 重子模版本,这是最后一个致力于在目前的分支机构:

    git reset HEAD path/to/submodule

  3. 在这一点上,你有一个无冲突的版本你的子模块,你现在可以更新的最新版本中的模块的储存库:

    cd path/to/submodule
    git submodule foreach git pull origin SUBMODULE-BRANCH-NAME
  4. 现在你可以 commit 这和回到工作。

首先,找到要引用子模块的哈希值。然后运行

~/supery/subby $ git co hashpointerhere
~/supery/subby $ cd ../
~/supery $ git add subby
~/supery $ git commit -m 'updated subby reference'

这对我来说是有用的,可以让我的子模块得到正确的哈希引用,并继续我的工作,而不会产生任何进一步的冲突。

我将 git rebase -i origin / master 解决了这个问题。我想采用主模块的子模块参考,所以我只是做了:

git reset master path / to / submodule

然后

git rebase --continue

这解决了我的问题。

从这次讨论中获得帮助。

git reset HEAD subby
git commit

为我工作:)

在我的父目录中,我看到:

$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Unmerged paths:
(use "git reset HEAD <file>..." to unstage)
(use "git add <file>..." to mark resolution)

所以我就这样做了

git reset HEAD linux
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top