问题标签 [git-subtree]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
17052 浏览

git - git-subtree 拉取并发症

我们一直在尝试让git-subtree处理一个项目(使用 git 版本 1.7.9.4)并且遇到了一些复杂情况。几个月前,其他人使用此命令添加了子树:

现在已经有了实质性的更改foo,我们希望合并这些更改,理想情况下将它们压缩。自从导入以来,没有任何文件被修改过。

我尝试了三件事来尝试合并更改。

第一的:

抛出异常:Can't squash-merge: 'foo' was never added.

第二:

这可行(有点),但存在拉入所有提交的问题,并且与已修改的文件发生冲突。

最后,我尝试了这个:

这给了我想要的结果,输出Automatic merge went well; stopped before committing as requested和所有文件都显示为已修改(具有正确的内容)。

理想情况下,我想继续使用第一个git-subtree版本并获得接近最后一个版本的输出。如果我们必须始终使用最后一个版本,我们会,但我有点困惑为什么最后一个不会产生合并冲突,而中间一个会产生合并冲突。

任何帮助表示赞赏。

0 投票
1 回答
423 浏览

git - Git 的子树合并策略没有选择正确的目录

我有一个看起来像这样的存储库:

subrepo是 github 上的一个存储库,我的存储库中有一个远程存储库,例如sub,它可以跟踪它,但是没有一个文件被合并。

我想要的是sub/mastersubrepo文件夹中合并。我知道这一点a_file_in_subrepo并且与another.ext他们完全一样,sub/master但是如果我跑步,git merge -s subtree sub/master我不会得到我想要的,而是得到:

我真的很困惑。我知道它猜测要自动合并到的目录,我可以覆盖它吗?

0 投票
0 回答
357 浏览

git - 我 git-subtree 从不相关的仓库多次添加到同一个前缀,现在我不能子树推送

我正在使用 git-subtree (https://github.com/apenwarr/git-subtree) 来管理我项目中的供应商存储库。

不久前,我重新设计了项目的布局,其中一部分涉及删除一些供应商代码并使用 git-subtree 从供应商 repo 的新副本中读取它。供应商 repo 的新副本是相同的代码,但是因为我从头开始重新创建它,所以没有常见的提交。

以下是相关的提交(从下到上阅读):

现在,如果我尝试将“git subtree push”返回到供应商存储库(包含 03149e3a4c3289b5a88fc3f7ae17fb11c44c4d68 的“新”存储库),我会收到以下错误:

因为 git-subtree-dir 与我给定的前缀匹配,但不再有任何提交 6324cb1724fcdf87294b2e4f438ddf5920a3156 并且我无法获取它,因为该 repo 不再存在。

关于如何解决这个问题的任何建议?我现在可以看到两个选项: 1. 在新目录下重新添加(原则上我真的不想这样做)。2. 手动删除导致损坏的先前提交中的子树数据(一般不建议这样做,但我认为在这种情况下我可以摆脱它,因为这个 repo 的其他副本并不多) .

0 投票
1 回答
4164 浏览

git - git subtree 将更改推送回子树项目

以下内容的缩写:我想将提交消息推送到子树,但只有适用于该树的消息。我该怎么做呢?


我有两个项目,MasterSlave. Slave被检出为Master检出到lib/slave的子树,git subtree merge --prefix=lib/slave --squash projects/slave其中projects/slave一个分支Slave被检出:

分支机构:

主项目/从站 → 从站

现在我正在我的master分支上工作,对作为两个项目一部分的文件进行提交,一切都很顺利。现在我想将更改推回Slave

  • git结帐奴隶
  • 混帐???掌握

如果我进行正常的合并,无论是否修改了任何文件,我都会为每个提交给 master 提交提交lib/slave。或者我可以做一个--squash并且只得到一个提交,但是我丢失了日志消息。

那么如何获得适当的日志消息呢?例如,如果我的master日志历史是:

  • 将图像添加到主控
  • 仅从站中修改的文件
  • 仅对 master 进行更多更改
  • master和slave中的修改文件

我希望将其添加到Slave

  • 仅从站中修改的文件
  • master和slave中的修改文件
0 投票
1 回答
590 浏览

git - Git子树错误

我尝试在 Mac 上安装git-subtree并在第一步之后:

当我尝试使用 git-subtree 我总是得到一个错误:

我的 git 版本是 1.7.7.4。

0 投票
2 回答
5623 浏览

git - 没有壁球的 git-subtree:查看日志

我使用不带 squash 选项的 git subtree add 将一棵树合并到我的存储库中。git 日志显示提交已成功添加到存储库。但是,如果我执行 a git log --follow filename,历史记录会在合并处停止,并且不会显示以前的提交。我尝试使用-M而不是,--follow但这也不起作用。如何获取合并前特定文件或文件的提交日志?

0 投票
1 回答
119 浏览

git - 并排递归 Git 子模块

在我们公司,我们通过堆积几个框架/库来制作项目:

到目前为止,我们正在使用一个包含所有项目和框架的大型 git 存储库,并且我们正在使用git subtree来拆分框架以发布它(它是开源的)。

我们希望能够将这个大存储库拆分到不同的项目中,但是有这么多递归依赖项的事实让我担心:

AFAIK,两个 git 子模块/git 子树都要求所有库代码都在主存储库中,所以我们最终会得到这样的项目结构:

我们不喜欢到处都有这么多的框架副本,也不喜欢框架文件夹在层次结构中如此深入。

我们想要的是项目 A 存储库在拉取时断言存在与当前包含一些 SHA的存储库并排,并检查此 SHA。

有没有办法让 git 子模块/子树并排?

0 投票
3 回答
8976 浏览

git - 在源代码控制下管理代码使用的第三方源代码和二进制文件

我在源代码控制下有一个大型代码库(以前是颠覆,现在是 git)。为了编译代码并运行测试,我使用了一组 3rd 方库。这些库可以分为几类L

  • 仅限二进制文件
  • 第三方来源
  • 3rd 方来源 + 本地修改

每个库都有其 {Windows, Linux} X {debug, release} X {32bit, 64bit} 配置。此外,这些库随着时间的推移而发展,我的项目的不同版本使用这些库的不同版本/构建。

我的问题是存储这些第 3 方的最佳方式是什么?

这是我的一组偏好:

  1. 保持项目源存储库的大小较小
  2. 使项目源与第 3 方保持同步,以便我始终可以编译和运行旧版本
  3. 易于管理
  4. 跨平台

我尝试并想到了几种解决方案,但都不令人满意:

  1. 使用版本控制脚本从手动管理的 ftp 服务器获取二进制文件,该服务器包含所有版本的库。这可行,但需要仔细管理服务器上的目录结构。这很容易出错,因为有人可能会用新版本覆盖其中一个二进制文件。
  2. SVN externals - 当时 SVN externals 无法引用特定标签。今天我正在使用 git。
  3. Git 子模块 - 拉取可能很大的整个外部存储库。或者,它需要为每个库管理一个单独的存储库。子模块指向一个特定的标签,这意味着要么我得到所有的外部,当我只需要一些时,要么我在 git 树中模仿一些奇怪的文件系统。

我很清楚,第 3 方源代码需要存储在供应商分支的 git 中,但二进制文件和标头是另一回事。

0 投票
3 回答
5271 浏览

git - git subtree merge 和 git-subtree 有什么区别

我刚刚发现了 git-subtree 工具,该工具前段时间成为主要 git repo 的一部分 https://github.com/apenwarr/git-subtree/

但是我不完全理解这个工具在现有的“git read-tree”+“git merge -s subtree”上提供了什么功能。git-subtree 的唯一目的是让生成的提交历史看起来更好,还是它有更多我忽略的功能?

0 投票
1 回答
484 浏览

git - 如何告诉 git 在子树合并期间忽略某些文件夹和文件?

我有具有以下目录结构的主分支

而且我还有一个包含以下文件的 templates_master 分支(就在根目录中)

然后我去 master 并将模板加载到 master templates 文件夹中

现在形成这个主结构

然后我留在 master 并在 templates/a.html 中引入一些更改,并进行几次提交。现在我希望这个修改过的 templates/a.html 回到原来的分支。我切换到 templates_master 分支并运行此命令

然而,这个命令不仅将 master:templates/a.html 复制到 templates_master:a.html ,而且还复制那些 libs 文件,所以基本上现在我的 templates_master 分支拥有原始主模板/拥有的所有内容。是否可以告诉 git 仅将某些文件和文件夹保留在主分支中,或者此逻辑是否在 git 级别上硬编码,即在子目录合并期间,它使用指向模板 / 的树状结构 / 模板 / 中的所有内容是并且只能是子目录模板/?