跟踪通过`git subtree`合并的外部git仓库

4
我正在尝试建立一个管理共享代码和外部依赖关系的良好模式,涉及到it技术。由于其他地方已经详细记录了原因,使用子模块会有足够多的问题,因此我倾向于远离它。自Git 1.8以来,内置了子树命令,并且似乎涵盖了我关心的许多内容,但仍然缺少一些核心场景。我希望有人在官方子树功能的基础上编写了一些脚本来填补这些空白。
我想要的似乎是缺失的东西:
- 跟踪通过子树添加了什么,以及指定了哪个分支 - 能够执行git subtree pull-all 和 push-all操作 - 作为最后一项,能够指定是否将子树锁定到特定提交或该分支中最新的提交。
这些功能都内置在命令中吗?还是我没发现如何使用它们?
另外,我还要求这必须在Windows上工作,以防影响任何事情。
谢谢!

我从官方源编译的 git 版本为 1.8.1.5 没有 git subtree 命令。也许它是附加组件或来自于 contrib 部分,或者可能您使用的是发布候选版(1.8.2-rc<一些内容>)... - twalberg
git --version 显示 git version 1.8.1.msysgit.1。我昨天使用官方的 Windows 二进制文件从 1.7 升级到了这个版本。我最初是从一个 Github 存储库查看它,但现在它有这个文档:https://github.com/apenwarr/git-subtree/blob/master/THIS-REPO-IS-OBSOLETE,评论说它已经被整合到 git 中了。 - Joe Castro
2
不,它从未被集成到git中 - 它是git“contrib”文件夹的一部分 - 这并不意味着它会自动安装。请参见此处:https://github.com/git/git/tree/master/contrib/subtree - Chronial
啊,我没有意识到这个区别的存在。谢谢你的澄清。 - Joe Castro
嘿乔,你一年多前就问过这个问题了。我正在试图弄清楚完全相同的事情。你最终解决了什么?我的主要问题是你的第一个要点——跟踪子树来自何处。谢谢! - Jeff Lamb
我们一直在使用子模块。自从我提出了子模块能够跟踪分支而不仅仅是SHA的能力后,这对我们有所帮助。最终让我放弃使用子树的主要原因是当您管理在子树版本和实际项目中进行的更改时,提交历史记录无法很好地跟踪 - 需要来回几次迭代才能真正解决一组更改集。 - Joe Castro
1个回答

0

不,这样的命令不存在。像这样的命令也很难实现,因为git-subtree不会将子树来自哪里的元数据存储下来。如果您想要类似的功能,我强烈推荐使用子模块。但是,它们也需要您进行一些脚本编写才能实现您想要的功能。


使用分离的HEAD似乎容易出错,而且通常很容易陷入一种状态,在这种状态下我们可能会丢失工作,因此我认为应该避免使用子模块。我没有在任何大型项目中尝试过使用它们,但我的同事们已经尝试过,并且有强烈的负面意见。当在Google上搜索此场景的一般选项时,我发现很少有页面推荐使用子模块作为解决方案。如果确实更好,并且可以通过脚本使其安全,则我很乐意尝试。 - Joe Castro
1
此外,我看到过像这样的东西:http://endot.org/2012/02/12/git-subtree-tracking-made-easy/,它开始构建我所寻找的使用子树的工作流程。我希望有人已经进一步探索了这个主题,并使用Git/contrib版本而不是一个单独的分支。 - Joe Castro
分离头状态确实有点危险。但是在编写代码和提交之前,您应该检查自己所在的分支。 - Chronial

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接