问题标签 [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.
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
版本并获得接近最后一个版本的输出。如果我们必须始终使用最后一个版本,我们会,但我有点困惑为什么最后一个不会产生合并冲突,而中间一个会产生合并冲突。
任何帮助表示赞赏。
git - Git 的子树合并策略没有选择正确的目录
我有一个看起来像这样的存储库:
subrepo
是 github 上的一个存储库,我的存储库中有一个远程存储库,例如sub
,它可以跟踪它,但是没有一个文件被合并。
我想要的是sub/master
在subrepo
文件夹中合并。我知道这一点a_file_in_subrepo
并且与another.ext
他们完全一样,sub/master
但是如果我跑步,git merge -s subtree sub/master
我不会得到我想要的,而是得到:
我真的很困惑。我知道它猜测要自动合并到的目录,我可以覆盖它吗?
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 的其他副本并不多) .
git - git subtree 将更改推送回子树项目
以下内容的缩写:我想将提交消息推送到子树,但只有适用于该树的消息。我该怎么做呢?
我有两个项目,Master
和Slave
. 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中的修改文件
git - 没有壁球的 git-subtree:查看日志
我使用不带 squash 选项的 git subtree add 将一棵树合并到我的存储库中。git 日志显示提交已成功添加到存储库。但是,如果我执行 a git log --follow filename
,历史记录会在合并处停止,并且不会显示以前的提交。我尝试使用-M
而不是,--follow
但这也不起作用。如何获取合并前特定文件或文件的提交日志?
git - 并排递归 Git 子模块
在我们公司,我们通过堆积几个框架/库来制作项目:
到目前为止,我们正在使用一个包含所有项目和框架的大型 git 存储库,并且我们正在使用git subtree来拆分框架以发布它(它是开源的)。
我们希望能够将这个大存储库拆分到不同的项目中,但是有这么多递归依赖项的事实让我担心:
AFAIK,两个 git 子模块/git 子树都要求所有库代码都在主存储库中,所以我们最终会得到这样的项目结构:
我们不喜欢到处都有这么多的框架副本,也不喜欢框架文件夹在层次结构中如此深入。
我们想要的是项目 A 存储库在拉取时断言存在与当前包含一些 SHA的存储库并排,并检查此 SHA。
有没有办法让 git 子模块/子树并排?
git - 在源代码控制下管理代码使用的第三方源代码和二进制文件
我在源代码控制下有一个大型代码库(以前是颠覆,现在是 git)。为了编译代码并运行测试,我使用了一组 3rd 方库。这些库可以分为几类L
- 仅限二进制文件
- 第三方来源
- 3rd 方来源 + 本地修改
每个库都有其 {Windows, Linux} X {debug, release} X {32bit, 64bit} 配置。此外,这些库随着时间的推移而发展,我的项目的不同版本使用这些库的不同版本/构建。
我的问题是存储这些第 3 方的最佳方式是什么?
这是我的一组偏好:
- 保持项目源存储库的大小较小
- 使项目源与第 3 方保持同步,以便我始终可以编译和运行旧版本
- 易于管理
- 跨平台
我尝试并想到了几种解决方案,但都不令人满意:
- 使用版本控制脚本从手动管理的 ftp 服务器获取二进制文件,该服务器包含所有版本的库。这可行,但需要仔细管理服务器上的目录结构。这很容易出错,因为有人可能会用新版本覆盖其中一个二进制文件。
- SVN externals - 当时 SVN externals 无法引用特定标签。今天我正在使用 git。
- Git 子模块 - 拉取可能很大的整个外部存储库。或者,它需要为每个库管理一个单独的存储库。子模块指向一个特定的标签,这意味着要么我得到所有的外部,当我只需要一些时,要么我在 git 树中模仿一些奇怪的文件系统。
我很清楚,第 3 方源代码需要存储在供应商分支的 git 中,但二进制文件和标头是另一回事。
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 的唯一目的是让生成的提交历史看起来更好,还是它有更多我忽略的功能?
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 级别上硬编码,即在子目录合并期间,它使用指向模板 / 的树状结构 / 模板 / 中的所有内容是并且只能是子目录模板/?