Windows GIT 2.20.0 如何将文件夹拆分为自己的存储库并保留历史记录

Windows Git 2.20.0 Using Bash(和 Windows 命令行 git)结果相同。

是否有一种可接受且安全的方法可以从大型存储库中提取文件夹并将其移动到自己的 REPO 中,同时保持指向大型存储库的链接以同步回主代码库?

GROUP
 Company1
   Apps
     SharedApp
 Company2
   Apps

我想将 SharedApp 提取到它自己的存储库中,但如果可能,将其与 GROUP 保持链接。因此,如果有人签出 GROUP,他们会得到很多,但 3rd 方开发人员只能签出 Apps 文件夹。

我试过使用:

git filter-branch --prune-empty --subdirectory-filter SharedApp

但这只是返回“找不到要重写的内容”

我也试过:

git subtree -P SharedApp -b newbranch

但这只是将整个结构集放在一个新分支“newbranch”上,并且不会像(我认为)文档所说的那样过滤任何内容。

曾考虑使用 SubRepos,但我听说它们在生产线上特别麻烦。

非常感谢任何帮助。

编辑:在某些时候,我需要为很多文件夹和库执行此操作,并将它们链接回主存储库。因此问题。

马克·阿德尔斯伯格

我不明白你对“安全”的强调。您正在使用 git - 您对克隆所做的任何操作只会影响该克隆。只要你在影响远程之前验证你在本地做了什么,你就不应该丢失任何东西。您担心的风险是什么?

如果您使用filter-branch,您将没有一种简单的方法来集成存储库之间的未来更改。并不是说没有办法做到这一点,但它需要跳过重要的环节,因为结果与原始结果无关。

也就是说,如果您想使用filter-branch: 这样做的原因之一是未正确指定路径。确保您提供了工作树根目录的完整路径,并且取决于您的文件系统大小写可能很重要。(在 Windows 上,它通常无关紧要;Mac 或 *nix 可能会如此。)如果有一个 SharedApp 目录,其中包含直接在 repo 根目录下提交的文件,那么给定的过滤器参数应该没问题。

此外,您可能需要添加一个--all参数(或一个或多个分支名称),以便它知道要重写什么。

git filter-branch --prune-empty --subdirectory-filter SharedApp -- --all

在我看来,subrepos 是 git 提供的最接近你所要求的东西。是的,很多人不喜欢它们;再说一次,很多其他人使用它们就好了。您必须花时间了解如何使用它们,不要期望它们以与它们不同的方式工作,否则就不要使用它们。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

从文件夹创建子模块存储库,并保留其git commit历史记录

如何将文件从一个文件夹移动到同一git存储库中的保留历史记录的另一个文件夹

Git:在保留历史记录的同时调和Windows中两个具有重复名称(文件夹不同)的文件夹

如何git将文件夹和文件移动到新文件夹并保留历史记录?

在保留历史记录的同时将几个文件夹和文件从git存储库复制到另一个

从git历史记录中删除文件夹以减小存储库大小

如何将单个文件的历史记录从旧的Git存储库复制到新的存储库?

Git:在不丢失历史记录的情况下将子文件夹从存储库获取到新文件夹

从git存储库中拆分一个带有所有分支和历史记录的子文件夹

如何将Git存储库历史记录重播到子目录中?

将git历史记录拆分为分支

在git存储库中,如何在不丢失Git历史记录的情况下删除旧的已重命名的“大写”文件夹

GIT重命名文件夹历史记录

查看文件夹的git历史记录

如何将具有历史记录的SVN存储库迁移到新的Git存储库?

如何将多个git存储库重组为单个存储库并保存历史记录?

将文件以及git中的历史记录移动到其他文件夹

如何在保留历史记录的同时拆分并重命名git中的代码文件?

如何合并两个不相关的git存储库,保留历史记录

git 将文件夹向下移动一级并维护历史记录

合并缺少提交历史记录的git存储库到保留历史记录的存储库

如何使用BFG从git历史记录中永久删除文件夹

如何获取整个git历史记录的文件夹大小

如何将不同的git历史记录推送到不同的存储库?

如何从Git存储库中的提交历史记录中删除/删除大文件?

如何从git存储库中删除文件,但仅删除历史记录中的某个点?

合并2个Rails App子目录,保留git历史记录

将文件夹从一个仓库复制/移动到另一个仓库,同时在 Git 中保留历史记录

Git:如何将分支的历史记录保存到单个文件中