gpt4 book ai didi

git - 获取已使用 git-svn 重命名的 SVN 存储库的完整历史记录

转载 作者:太空狗 更新时间:2023-10-29 12:52:49 24 4
gpt4 key购买 nike

我有一个 SVN 存储库,它已从“Project”重命名为“Project v1”。

然后我做了一个 git svn clone 来创建重命名的 SVN 文件夹的 git 版本。

当我 git log 新创建的 git 存储库时,我只看到一个历史记录项。这是我重命名文件夹时提供给 SVN 存储库的提交消息。

有没有办法让 git 存储库在文件夹被重命名(或任何其他可能的重命名之前)之前拥有所有 SVN 历史记录?

最佳答案

我过去这样做的唯一方法(不知道这是最好的还是唯一的方法!)是明确地 git svn fetch以前的历史(你可能需要第二个 Remote ),然后用 git filter-branch 将重命名的树移植到旧历史上(文档中有一个重新设置树的具体示例)。

例子

发件人:svn://server/repo/project收件人:svn://server/repo/project_v1

可选的第一步:如果您没有现有的 git-svn为此,请继续并 git svn clone svn://server/repo/project .大多数人可能已经有了这个 repo,因为他们一直在使用 git-svn一直。如果您根本没有 git 存储库,您可以在任何一侧进行初始克隆。

在你的git-svn repo 为项目的新名称添加一个远程。我不认为有一个命令,你只需在你的 .git/config 中添加一个节与已经存在的非常相似:

[svn-remote "svn_v1"]
url = svn://server/repo/project_v1
fetch = :refs/remotes/git-svn-v1

可以使用 --remote svn_v1 选择新的 SVN Remote 任何 git-svn 的选项命令。您要做的第一件事是 git-svn fetch --remote svn_v1这将用该副本的历史填充你的 git 仓库。正如原始问题所指出的,这将是一个非常简短的历史!

现在我们应用 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 "..."] 中的 Remote 。 .git/config 中的行这样您的主要名称就被命名为“svn”。您可以将另一个命名为 -old甚至远程它。

警告:这是我的内存,我自己并没有重复这些步骤。欢迎评论和更正。

关于git - 获取已使用 git-svn 重命名的 SVN 存储库的完整历史记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6514611/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com