我有一个SVN存储库,从"Project"重命名为"Project v1".
然后我做了一个git svn clone创建重命名的SVN文件夹的git版本.
当我git log新创建的git存储库时,我只看到一个历史项.这是我在重命名文件夹时给SVN存储库提交的提交消息.
有没有办法让git存储库在重命名文件夹之前拥有所有SVN历史记录(或者在该文件夹之前的任何其他可能的重命名)?
我过去唯一这样做的方式(不知道它是最好的还是唯一的方式!)是明确git svn fetch的先前历史(你可能需要第二个遥控器),然后将重命名的树移植到旧历史上git filter-branch(有)重新定义树的文档中的一个特定示例).
来自:svn://server/repo/project
收件人:svn://server/repo/project_v1
可选的第一步:如果您没有现有的git-svn回购,请继续git svn clone svn://server/repo/project.大多数人可能已经拥有这个回购,因为他们一直在努力git-svn.如果你还没有git repo,你可以在任何一方进行初始克隆.
在您的git-svn仓库中,为项目的新名称添加一个远程.我不认为有这样的命令,你只需要添加一个与你.git/config已经存在的类似的节:
[svn-remote "svn_v1"]
url = svn://server/repo/project_v1
fetch = :refs/remotes/git-svn-v1
Run Code Online (Sandbox Code Playgroud)
可以使用--remote svn_v1任何git-svn命令选项选择新的SVN远程.您要做的第一件事就是git-svn fetch --remote svn_v1将git repo与该副本的历史记录一起填充.正如原始问题所指出的,这将是一段非常简短的历史!
现在我们在git filter-branch联机帮助页中应用该示例.您将需要知道旧历史的提示,git show-ref -s remotes/git-svn(再次,假设您的原始克隆是旧版本).然后用git filter-branch --parent-filter 'sed "s/^\$/-p <graft-id>/"' remotes/git-svn-v1这里<graft-id>是你刚旧历史的尖端SHA.
验证这是否有效git log remotes/git-svn-v1并查看所有历史记录.
此时,您可以转到工作分支并将git reset --hard remotes/git-svn-v1该分支切换到新历史记录.
请注意,svn-remote命名的"svn"将是您的默认值,因此最后您需要[svn-remote "..."]在您的行中重命名遥控器,.git/config以便您的主要名称命名为"svn".您可以命名另一个-old甚至远程.
警告:这是来自记忆,我不仅仅是自己重复这些步骤.欢迎评论和更正.
| 归档时间: |
|
| 查看次数: |
3203 次 |
| 最近记录: |