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] 删除。
我来说两句