我有一个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 rm -r --cached subfolder/
然后git init
在子文件夹上.但是,历史记录不会导入新存储库.
我正在努力用Cygwin安装git-subtree,并且没有任何好的在线教程专注于从Windows中构建源代码.你有没有遇到这个问题,解决这个问题的最佳策略是什么?
我刚刚使用 cvs2git 在一个 git repo 中转换了一个 10G CVS repo(大约 120 个模块),在 RHEL5 机器上没有任何错误。我想从存储库中拆分一个子目录+历史记录并创建一个新的。(例如:如何在保持历史记录的同时将单个目录从 git 存储库移动到新存储库?)
我试过:
git filter-branch --subdirectory-filter xxx.model -- --all
Run Code Online (Sandbox Code Playgroud)
工作正常,直到处理完最后一个项目 - 然后它使用 CPU 挂起而没有任何进展。使用strace
,它看起来像这样:[断开的链接]。
strace
- 所有分叉最终输出 > 2.5G - 我不知道它是否会变大;我阻止了它。
是什么导致了这种奇怪的行为?是否有任何其他方法可以使用现有存储库的子目录+历史记录创建新存储库?
我想将我的git存储库中的文件夹拆分为新文件夹.但我想保留所有与此文件夹相关的所有打开/关闭分支和历史记录.
\ Source Repo
--\ AAA
--\ BBB
----\ DDD
----\ EEE
--\ CCC
\ New Repo 1
--\ AAA
--\ CCC
\ New Repo 2 (BBB subfolder)
--\ DDD
--\ EEE
Run Code Online (Sandbox Code Playgroud)
我按照此处描述的步骤https://help.github.com/articles/splitting-a-subfolder-out-into-a-new-repository/ - 但这仅适用于单个分支.最后 - 我获得了所有(?)提交的新存储库,但没有分支信息.
我尝试使用--all
参数为所有分支执行此操作,但我不清楚如何将所有重写的分支推送到空的远程仓库.
这是我目前的情况:
$ git clone https://github.com/USERNAME/REPOSITORY-NAME
$ cd REPOSITORY-NAME
$ git filter-branch --prune-empty --subdirectory-filter FOLDER-NAME -- --all
Run Code Online (Sandbox Code Playgroud)
在这一点上,如果我看看我的本地回购,我似乎有所有历史和所有分支在遥控器的起源.
$ git remote -v
origin https://github.com/USERNAME/REPOSITORY-NAME.git (fetch)
origin https://github.com/USERNAME/REPOSITORY-NAME.git (push)
$ git remote set-url origin https://github.com/USERNAME/NEW-REPOSITORY-NAME.git
$ git remote -v
origin https://github.com/USERNAME/NEW-REPOSITORY-NAME.git …
Run Code Online (Sandbox Code Playgroud)