我有一个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 - SVN速成课程等等,他们都解释了这个和那个,但是你无处可以找到一个简单的指令:
SVN存储库: svn://myserver/path/to/svn/repos
Git存储库: git://myserver/path/to/git/repos
git-do-the-magic-svn-import-with-history \
svn://myserver/path/to/svn/repos \
git://myserver/path/to/git/repos
Run Code Online (Sandbox Code Playgroud)
我不希望它那么简单,我不指望它是一个单一的命令.但我确实希望它不要试图解释任何事情 - 只是说这个例子采取了哪些步骤.
我有一个我必须承诺的中央SVN存储库,但我对git充满热情(就像我认识的任何其他开发人员一样).这个案子众所周知.
然后我读了一下git-svn并尝试了一下.由于我不需要完整的历史,仅仅两个月左右,我就是这样的:
git svn clone -r 34000 -s https://svn.ourdomain.com/svn/repos/Project/SubProject
Run Code Online (Sandbox Code Playgroud)
像往常一样,SubProject拥有子目录trunk,tags和branches.大.
然后,为了获得最后一次修订,我做到了
git svn rebase
Run Code Online (Sandbox Code Playgroud)
有些下载,很棒.最后修订,日志等等,好的,现在我将切换到我的功能分支.
$ git branch
* master
Run Code Online (Sandbox Code Playgroud)
$ git branch -r
trunk
Run Code Online (Sandbox Code Playgroud)
$ git branch -a
* master
remotes/trunk
Run Code Online (Sandbox Code Playgroud)
问题是:我的分支在哪里?我做错了什么吗?我怎么做才能在新的git仓库中获得我的分支机构?
git-svn,无论我在哪里阅读它,明智地处理分支和标签,但行为不是我所期望的.谢谢!
编辑:我刚刚发现git svn fetch将会这样做.但它会得到所有修改,这是我不喜欢的.