标签: git-subtree

将(移动)子目录分离到单独的Git存储库中

我有一个Git存储库,其中包含许多子目录.现在我发现其中一个子目录与另一个子目录无关,应该分离到一个单独的存储库.

如何在将文件的历史记录保存在子目录中的同时执行此操作?

我想我可以制作一个克隆并删除每个克隆的不需要的部分,但我想这会给我一个完整的树,当检查旧版本等.这可能是可以接受的,但我宁愿能够假装两个存储库没有共享历史记录.

为了说清楚,我有以下结构:

XYZ/
    .git/
    XY1/
    ABC/
    XY2/
Run Code Online (Sandbox Code Playgroud)

但我想这样做:

XYZ/
    .git/
    XY1/
    XY2/
ABC/
    .git/
    ABC/
Run Code Online (Sandbox Code Playgroud)

git git-filter-branch git-subtree

1712
推荐指数
15
解决办法
25万
查看次数

你如何合并两个Git存储库?

请考虑以下情形:

我在自己的Git仓库中开发了一个小型实验项目A. 它现在已经成熟,我希望A成为更大的项目B的一部分,它有自己的大型存储库.我现在想添加A作为B的子目录.

如何将A合并到B中,而不会丢失任何一方的历史记录?

git merge repository git-subtree

1517
推荐指数
16
解决办法
44万
查看次数

git子模块和子树之间的差异

使用git子模块和子树之间有什么概念上的区别?

每种情况的典型情况是什么?

git git-submodules git-subtree

269
推荐指数
6
解决办法
7万
查看次数

在不破坏文件历史记录的情况下合并两个Git存储库

我需要将两个Git存储库合并到一个全新的第三个存储库中.我已经找到了很多关于如何使用子树合并进行此操作的描述(例如JakubNarębski关于如何合并两个Git存储库的答案)并遵循这些说明大多数工作,除了当我提交子树合并所有文件从旧存储库记录为新添加的文件.我可以在旧的存储库中看到提交历史记录git log,但如果我这样做git log <file>,则只显示该文件的一次提交 - 子树合并.从对上述答案的评论来看,我并不是唯一一个看到这个问题的人,但我发现没有公开的解决方案.

有没有办法合并存储库并保持个别文件历史记录完整?

git git-subtree

209
推荐指数
6
解决办法
9万
查看次数

Git子树 - 子树最新但无法推送

我正在使用Git子树和我正在处理的几个项目,以便在它们之间共享一些基本代码.基本代码经常更新,升级可以在任何项目中进行,最终所有项目都会更新.

我遇到了一个问题,git报告我的子树是最新的,但是推送被拒绝了.例如:

#! git subtree pull --prefix=public/shared project-shared master
From github.com:****
* branch            master     -> FETCH_HEAD
Already up-to-date.
Run Code Online (Sandbox Code Playgroud)

如果我推,我应该得到一个消息,没有什么可以推动......对吗?对?:(

#! git subtree push --prefix=public/shared project-shared master
git push using:  project-shared master
To git@github.com:***
! [rejected]        72a6157733c4e0bf22f72b443e4ad3be0bc555ce -> master (non-fast-forward)
error: failed to push some refs to 'git@github.com:***'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Merge the remote changes (e.g. 'git pull')
hint: before pushing again.
hint: See the 'Note about …
Run Code Online (Sandbox Code Playgroud)

git push pull git-subtree

80
推荐指数
5
解决办法
2万
查看次数

Git子模块的替代品?

我觉得使用Git子模块对于我的开发工作流程来说有点麻烦.我听说过Git子树和Gitslave.

  • 是否有更多工具用于多个存储库项目以及它们如何比较?
  • 这些工具可以在Windows上运行吗?

git-submodules git-subtree git-slave git-repo git-subrepo

76
推荐指数
1
解决办法
2万
查看次数

如何在git-subtree添加后重新定义?

我正在尝试学习在Git 1.7.11中添加的新git-subtree命令.添加子树后,我似乎失去了变基的能力.我有一个带有README文件的主存储库和一个库存储库,它也有一个README文件.我将它添加到lib目录subtree add:

$ git subtree add -P lib/mylib myliborigin master
Run Code Online (Sandbox Code Playgroud)

这很好,但现在历史看起来像这样:

*   22c1fe6 (HEAD, master) Merge commit 'b6e698d9f4985825efa06dfdd7bba8d2930cd40e' as 'lib/mylib' - 
|\                                                                                                                
| * b6e698d Squashed 'lib/mylib/' content from commit d7dbd3d
* b99d55b Add readme
* 020e372 Initial
Run Code Online (Sandbox Code Playgroud)

现在当我想要反对我的repo origin/master并且它失败时因为squash commit直接应用于它不适用的父提交,因为它被应用于repo的根而不是我添加的时候给它的前缀子树.

如果我看一下壁球提交,原因很清楚.没有关于前缀的信息.这只是原始的mylib提交压扁在一起.只有下一个合并提交知道它的任何内容,但rebase不会在此处考虑它.

是否有任何变通方法(除了永远不会对子树提交进行重新定位)?

git git-rebase git-subtree

58
推荐指数
5
解决办法
1万
查看次数

什么时候使用git子树?

有什么问题可以git subtree解决?何时以及为什么要使用该功能?

我已经读过它用于存储库分离.但为什么我不只是创建两个独立的存储库而不是将两个不相关的存储库合二为一?

这个GitHub教程解释了如何执行Git子树合并.

我知道如何使用它,但不知道何时(用例)及其原因,以及它与之相关的方式git submodule.当我依赖于另一个项目或库时,我会使用子模块.

git git-subtree

57
推荐指数
4
解决办法
2万
查看次数

如何在根目录中列出git子树?

例如,你可以做一个git remote --verbosegit将显示你项目中的所有遥控器,git branch将显示所有分支并发出当前分支的信号,但是如何列出所有子树,没有任何破坏性命令?git subtree将给出用法示例,但不会列出任何内容.子树只有add,pull,push,split,merge.

git git-subtree

38
推荐指数
2
解决办法
2万
查看次数

使用git-subtree添加远程仓库的子目录

有没有办法使用git-subtree将远程存储库的子目录添加到我的存储库的子目录中?

假设我有这个存储库:

/
    dir1
    dir2
Run Code Online (Sandbox Code Playgroud)

而这个存储库:

/
    libdir
        some-file
    some-file-to-be-ignored
Run Code Online (Sandbox Code Playgroud)

我想将library/libdir导入main/dir1,使它看起来像这样:

/
    dir1
        some-file
    dir2
Run Code Online (Sandbox Code Playgroud)

使用git-subtree,我可以指定使用参数导入dir1--prefix,但是我是否还可以指定仅获取子树中特定目录的内容?

使用git-subtree的原因是我以后可以同步这两个存储库.

git git-subtree

38
推荐指数
1
解决办法
1万
查看次数