【问题标题】:git merge in wrong foldergit合并到错误的文件夹
【发布时间】:2013-12-03 16:10:17
【问题描述】:

我在 git 上有mainProject,还有一个shared library。 这个shared library也在subProject中。

我的工作流程

我通过克隆项目开始我的项目并创建一个分支:

git clone https://github.com/user/mainProject.git main-project
git checkout -b fix

我在 mainProject 上工作,并在文件夹 lib/shared library 的根目录)中添加了一个 awesomeClass.php

新的文件结构:

/index.php 
/page1.php
/lib/form/contact.php
/lib/awesomeClass.php*

*=新

在此之后我添加并提交我的更改。

git add lib/awesomeClass.php
git commit -m "added new awesome class that will blow your mind"

添加shared library的远程位置,获取它并将远程连接到本地分支

git remote add sharedlib https://github.com/user/sharedlib.git
git fetch sharedlib
git checkout -b sharedlib sharedlib/master

这会将我的分支切换到sharedlib,我尝试将我的更改合并到其中,以将shared library 的相同更改添加到我的子项目中。

 git merge --squash -s subtree --no-commit fix

这是出错的地方,文件结构是(从sharedlib分支角度看):

/lib/form/contact.php
/lib/awesomeClass.php

合并后:

/lib/form/index.php*
/lib/form/page1.php*
/lib/form/lib/form/contact.php*
/lib/form/lib/awesomeClass.php*

/lib/form/contact.php
/lib/awesomeClass.php

*=新

谁能解释我如何只将shared library 而不是完整的mainProject 合并到错误的文件夹中? 谢谢!

【问题讨论】:

  • 为什么sharedLib 的所有文件都在lib 文件夹下?这不应该只存在于mainProject 中以便将sharedLib 与存储库的其余内容分开吗?
  • 不确定您如何处理您的sharedLib,但以防万一本文解释了一种可能的策略:git-scm.com/book/ch6-7.html
  • 我用过这个:Nested libraries submerge。这篇文章只工作一次。在sharedLib 的第一次合并/更新后,它只会合并/更新到错误的文件夹。例如。就像文件夹中的上述解释 lib/form 而不仅仅是 lib/.. 我试过你的文章,但在合并步骤也是如此。

标签: git github merge git-subtree


【解决方案1】:

关于子树合并策略,您正在遵循一些复杂的工作流程,但这已经过时并且现在要简单得多。

您正在寻找的是contrib command git-subtree,它具有完整的拆分功能,可以从主项目中提取与该子目录特别相关的更改,以便您可以将它们合并回上游到子项目。

【讨论】:

  • 我确实看到了这个,但最终找到了解决方案。我刚刚制作了一个没有子树的工作流程。我将文件夹符号链接到项目中并将其放入 gitignore。这更容易、更安全。
  • 我认为我不同意其中任何一个,git subtree 非常简单,而且它更安全,因为你有工作状态的历史,而不是独立维护的 2 个项目,尝试回滚到某个时间点时,您将面临更大的风险。子树让您可以轻松地将所有子项目文件放在超级项目中,这几乎是最简单的。
猜你喜欢
  • 1970-01-01
  • 2014-01-28
  • 1970-01-01
  • 2021-07-04
  • 1970-01-01
  • 2010-12-13
  • 1970-01-01
  • 2017-12-04
  • 2011-08-25
相关资源
最近更新 更多