英语法语西班牙语

Ad


OnWorks 网站图标

git-subtree - 云端在线

通过 Ubuntu Online、Fedora Online、Windows 在线模拟器或 MAC OS 在线模拟器在 OnWorks 免费托管服务提供商中运行 git-subtree

这是 git-subtree 命令,可以使用我们的多个免费在线工作站之一在 OnWorks 免费托管服务提供商中运行,例如 Ubuntu Online、Fedora Online、Windows 在线模拟器或 MAC OS 在线模拟器

程序:

您的姓名


git-subtree - 将子树合并在一起并将存储库拆分为子树

概要


混帐 子树 添加 -P
混帐 子树 添加 -P
混帐 子树 拉-P
混帐 子树 推-P
混帐 子树 合并 -P
混帐 子树 分裂-P [选项] [ ]

商品描述


子树允许子项目包含在主项目的子目录中,
可选地包括子项目的整个历史。

例如,您可以将库的源代码包含在您的子目录中
应用程序。

不要将子树与用于相同任务的子模块混淆。 不像
子模块,子树不需要任何特殊结构(如 .gitmodule 文件或
gitlinks) 出现在您的存储库中,并且不要强迫您的存储库的最终用户
做任何特别的事情或了解子树的工作原理。 子树只是一个子目录
可以以任何方式与您的项目一起提交、分支和合并
想。

它们也不应与使用子树合并策略相混淆。 主要的
不同的是,除了将其他项目合并为子目录外,还可以
从您的项目中提取子目录的整个历史记录并将其放入
独立项目。 与子树合并策略不同,您可以来回交替
在这两个操作之间。 如果独立库更新,您可以
自动将更改合并到您的项目中; 如果你更新你的图书馆
项目,您可以再次“拆分”更改并将它们合并回库中
项目。

例如,如果您为一个应用程序制作的库最终在其他地方有用,您
可以提取其整个历史并将其发布为自己的 git 存储库,而无需
不小心混合了应用程序项目的历史记录。

Tips:
为了保持你的提交信息干净,我们建议人们分开他们的
尽可能在子树和主项目之间提交。 也就是说,如果你
进行影响库和主应用程序的更改,将其分两次提交
件。 这样,当您稍后拆分库提交时,它们的描述
仍然有意义。 但如果这对你不重要,那就不重要了 必要. 混帐
子树将简单地忽略提交的非库相关部分
稍后将其拆分为子项目。

指令



创建通过从给定的内容导入子树或者
和远程. 自动创建一个新的提交,加入
使用您自己的导入项目的历史记录。 和 - 壁球, 只导入一个提交
来自子项目,而不是它的整个历史。

合并
将最近的更改合并到进入子树。 和正常一样 混帐
合并,这不会删除您自己的本地更改; 它只是将这些更改合并到
最新的. 和 - 壁球, 只创建一个包含所有
改变,而不是在整个历史中合并。

如果你使用 - 壁球,合并方向并不总是向前; 你可以
例如,使用此命令可将时间从 v2.5 返回到 v2.4。 如果你的合并
引入冲突,您可以通过通常的方式解决它。


完全像 合并, 但平行 混帐 因为它从
指定的远程存储库。


做一个 分裂 (见下文)使用提供然后执行 混帐 推动
结果到存储库和参考。 这可用于将您的子树推送到
远程存储库的不同分支。

分裂
从项目的历史中提取一个新的、综合的项目历史子树。 这
新历史仅包括影响的提交(包括合并) , 和
这些提交中的每一个现在都包含以下内容在项目的根
而不是在子目录中。 因此,新创建的历史记录适合导出
作为一个单独的 git 存储库。

拆分成功后,将单个提交 ID 打印到标准输出。 这个
对应于新创建的树的 HEAD,但您可以对其进行操作
你要。

完全相同的历史的重复分割保证是相同的(即
产生相同的提交 ID)。 因此,如果您添加新的提交,然后
重新拆分,新提交将作为提交附加在您的历史记录之上
上次生成,所以 混帐 合并 和朋友会按预期工作。

请注意,如果您使用 - 壁球 当你合并时,你通常不应该只是 --重新加入
分手的时候。

配置


-q, --安静
抑制 stderr 上不必要的输出消息。

-d,--调试
在 stderr 上产生更多不必要的输出消息。

-P , --前缀=
指定存储库中要操作的子树的路径。 这个选项
对所有命令都是强制性的。

-m , --message=
此选项仅对添加、合并和拉取(不确定)有效。 指定作为
合并提交的提交消息。

配置 用于 添加, 合并, 推,


- 壁球
此选项仅对添加、合并和拉取命令有效。

与其合并子树项目的整个历史,不如只生成一个
包含要合并的所有差异的提交,然后合并那个新的
提交到您的项目中。

使用此选项有助于减少日志混乱。 人们很少想看到每一个变化
这发生在他们使用的库的 v1.0 和 v1.1 之间,因为没有
临时版本曾经包含在他们的应用程序中。

运用 - 壁球 当同一个子项目被多个包含时,也有助于避免出现问题
次在同一个项目中,或者被删除然后重新添加。 在这种情况下,它不
无论如何结合历史是有意义的,因为不清楚是哪一部分
历史属于哪个子树。

此外, - 壁球,可以在不同版本之间来回切换
子树,而不是严格向前。 混帐 子树 合并 - 壁球 总是调整
匹配完全指定的提交的子树,即使到达该提交
将需要撤消之前添加的一些更改。

无论你是否使用 - 壁球, 在本地存储库中所做的更改保持不变
并且可以稍后拆分并发送到上游到子项目。

配置 用于 SPLIT


--注释=
该选项仅对 split 命令有效。

生成合成历史时,添加作为每个提交的前缀
信息。 由于我们正在使用相同的提交消息创建新的提交,但可能
与原始提交不同的内容,这有助于区分它们和
避免混淆。

无论何时拆分,都需要使用相同的, 否则你没有
保证重新创建的新历史将与旧历史相同。 那会
防止合并正常工作。 无论如何,git subtree 试图让它工作,
特别是如果您使用--rejoin,但它可能并不总是有效。

-b , --分支=
该选项仅对 split 命令有效。

生成合成历史后,创建一个名为的新分支那
包含新的历史。 这适用于立即推动上游。
一定不存在。

--忽略加入
该选项仅对 split 命令有效。

如果你使用 --重新加入, git subtree 尝试优化其历史重建以
仅生成自上次以来的新提交 --重新加入. --忽略加入 禁用这个
行为,迫使它重新生成整个历史。 在大型项目中,这可以
需要很长时间。

--onto=
该选项仅对 split 命令有效。

如果你的子树最初是使用 git subtree 以外的东西导入的,它的
历史记录可能与 git subtree 所期望的不符。 在这种情况下,您可以指定
提交编号对应于子项目历史的第一次修订
已导入到您的项目中,并且 git subtree 将尝试构建其历史记录
从那里。

如果你使用 混帐 子树 ,您永远不需要此选项。

--重新加入
该选项仅对 split 命令有效。

拆分后,将新创建的合成历史合并回您的主要
项目。 这样,未来的分裂只能搜索历史的一部分
添加自最近的 --rejoin。

如果您的拆分提交最终合并到上游子项目中,然后您想要
获取最新的上游版本,这将允许 git 的合并算法更多
聪明地避免冲突(因为它知道这些合成提交已经是一部分
上游存储库的)。

不幸的是,使用此选项会导致 混帐 日志 显示每个新的额外副本
已创建的提交(原始的和合成的)。

如果你做所有的合并 - 壁球,请勿使用 --重新加入 当你分开时,因为
无论如何,您不希望子项目的历史成为您项目的一部分。

1. 地址 指挥


假设您有一个想要添加外部存储库的本地存储库
供应商库到。 在这种情况下,我们将 git-subtree 存储库添加为子目录
您已经存在的 git-extensions 存储库的 ~/git 扩展/:

$ git 子树添加 --prefix=git-subtree --squash \
git://github.com/apenwarr/git-subtree.git 主

需要是有效的远程引用,并且可以是不同的分支名称

您可以省略 --squash 标志,但这样做会增加提交的数量
包含在您的本地存储库中。

我们现在有一个 〜/ git-extensions/git-subtree 包含来自主人的代码的目录
我们的 git-extensions 存储库中 git://github.com/apenwarr/git-subtree.git 的分支。

2. 提取 A 子树 使用 犯罪, 合并 AND


我们以 git 源代码的存储库为例。 首先,获取您自己的副本
git.git 存储库:

$ git克隆git://git.kernel.org/pub/scm/git/git.git test-git
$ cd 测试-git

gitweb (commit 1130ef3) 在提交 0a8f4f0 时被合并到 git 中,之后就没有了
单独维护的时间更长。 但是想象一下它是单独维护的,我们想要
从那时起提取 git 对 gitweb 的更改,与上游共享。 你可以
做这个:

$ git subtree split --prefix=gitweb --annotate='(split) ' \
0a8f4f0^.. --onto=1130ef3 --重新加入 \
--branch gitweb-最新
$ gitk gitweb-最新
$ git推送 [电子邮件保护]:whatever/gitweb.git gitweb-latest:master

(我们用 0a8f4f0^.. 因为这意味着“从 0a8f4f0 到当前的所有更改
版本,包括 0a8f4f0 本身。”)

如果 gitweb 最初是使用合并的 混帐 子树 (或之前的分裂有
已经用 --rejoin 指定了)然后你可以做所有的拆分而无需
记住任何奇怪的提交 ID:

$ git subtree split --prefix=gitweb --annotate='(split) ' --rejoin \
-- 分支 gitweb-latest2

您可以同样轻松地从上游项目合并更改:

$ git subtree pull --prefix=gitweb \
[电子邮件保护]:whatever/gitweb.git 大师

或者,使用 - 壁球,您实际上可以倒带到 gitweb 的早期版本:

$ git 子树合并 --prefix=gitweb --squash gitweb-latest~10

然后做一些改变:

$日期>gitweb/myfile
$ git 添加 gitweb/myfile
$ git commit -m '创建我的文件'

再次快进:

$ git 子树合并 --prefix=gitweb --squash gitweb-latest

请注意,您的更改仍然完好无损:

$ ls -l gitweb/我的文件

您可以将其拆分并查看您对标准 gitweb 的更改:

git log gitweb-latest..$(git 子树拆分 --prefix=gitweb)

3. 提取 A 子树 使用


假设您有一个包含许多文件和子目录的源目录,并且您想要
将 lib 目录解压到它自己的 git 项目中。 这是一个简短的方法:

首先,在任何你想要的地方创建新的存储库:

$
$ git 初始化 --bare

回到原来的目录:

$ git subtree split --prefix=lib --annotate="(split)" -b split

然后将新分支推送到新的空存储库:

$ git push 拆分:主

使用 onworks.net 服务在线使用 git-subtree


免费服务器和工作站

下载 Windows 和 Linux 应用程序

  • 1
    深层清洁
    深层清洁
    核对所有构建的 Kotlin 脚本
    来自 Gradle/Android 项目的缓存。
    当 Gradle 或 IDE 允许您时很有用
    向下。 该脚本已经过测试
    macOS,但是...
    下载深度清理
  • 2
    Eclipse Checkstyle 插件
    Eclipse Checkstyle 插件
    Eclipse Checkstyle 插件
    集成了 Checkstyle Java 代码
    审计员进入 Eclipse IDE。 这
    插件提供实时反馈
    用户关于viol...
    下载 Eclipse Checkstyle 插件
  • 3
    AstrOrz播放器
    AstrOrz播放器
    AstrOrz Player 是一款免费的媒体播放器
    软件,部分基于 WMP 和 VLC。 这
    播放器采用极简风格,带有
    十多个主题色,还可以
    B ...
    下载 AstrOrzPlayer
  • 4
    电影启动器
    电影启动器
    Kodi Movistar+ TV 是 XBMC/ 的 ADDON
    Kodi 许可分配器
    IPTV服务解码器
    Movistar Integrado en uno de los
    媒体中心马...
    下载 movistartv
  • 5
    代码::块
    代码::块
    Code::Blocks 是一个免费的、开源的、
    跨平台 C、C++ 和 Fortran IDE
    专为满足最苛刻的需求而打造
    它的用户。 它的设计非常
    扩展...
    下载代码::Blocks
  • 6
    之中
    之中
    中间或高级 Minecraft 界面
    和数据/结构跟踪是一种工具
    显示 Minecraft 的概览
    世界,而无需实际创造它。 它
    能够 ...
    下载烟雨
  • 更多 ”

Linux 命令

Ad