相关疑难解决方法(0)

将(移动)子目录分离到单独的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存储库中

这个问题基于Detach子目录到单独的Git存储库中

我想分离一对,而不是分离一个子目录.例如,我当前的目录树如下所示:

/apps
  /AAA
  /BBB
  /CCC
/libs
  /XXX
  /YYY
  /ZZZ
Run Code Online (Sandbox Code Playgroud)

而我想这样做:

/apps
  /AAA
/libs
  /XXX
Run Code Online (Sandbox Code Playgroud)

--subdirectory-filter参数git filter-branch将无法工作,因为它在第一次运行时除去了给定目录之外的所有内容.我认为使用--index-filter所有不需要的文件的参数会起作用(尽管很乏味),但如果我尝试不止一次运行它,我会得到以下消息:

Cannot create a new backup.
A previous backup already exists in refs/original/
Force overwriting the backup with -f
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?TIA

git git-filter-branch

125
推荐指数
8
解决办法
4万
查看次数

Git子树和多个目录

我有一个相当大的git存储库,它有一个我维护库代码的目录.该目录包含许多子目录.

repo
+--- lib
|    +--- A
|    +--- B
...
|    +--- Z
Run Code Online (Sandbox Code Playgroud)

现在让我们假设我想要打开源子目录A,...,M并保持子目录的N,...,Z源代码.我们还假设我想:

  • 保留A,...,M在一个开源存储库中.原因是这些目录A,...,M具有相互依赖性,将它们分成单独的存储库会很困惑.
  • 保持我的封闭源存储库的结构不变.例如,我可以创建子目录lib/publib/pvt,但这将有级联需要改变其他地方引用效应或将需要大量的符号链接(lib/A -> lib/pub/A).
  • 有一个类似于git subtree我可以在我的封闭源代码库或开源代码库中修改代码的解决方案,我可以轻松地同步两个存储库之间的更改.

我已经在stackoverflow和google中搜索了一个解决方案,但似乎没有明显的解决方案.从概念上讲,这是git subtree应该能够做到的事情,但它只适用于单个子目录.

我已经查看了git-subtree脚本,目的是修改它.

https://github.com/git/git/blob/master/contrib/subtree/git-subtree.sh

在我看来,如果我要修改,subtree_for_commit()我应该能够说服git subtree split考虑不止一个目录进行拆分.但是我对git的了解还不足以理解脚本正在做什么并在不破坏事情的情况下修改它.

如果您对上述问题或任何其他修改指针有任何解决方案git-subtree,请告诉我.

git git-subtree

10
推荐指数
1
解决办法
4738
查看次数

标签 统计

git ×3

git-filter-branch ×2

git-subtree ×2