我已经签出了一个 svn 只读存储库(svn co 而不是 git svn)。我使用 git 进行了一些更改并提交,然后将其推送到 github。

此时,git 还没有 svn 的所有历史记录。我想知道此时是否有办法提取并导入它。

各种 git-svn 指南展示了如何导入一个干净的存储库并传输历史记录,但我找不到一个已经在使用的指南。

有帮助吗?

解决方案

您可能必须将svn导入到新的git存储库中,合并两个存储库(只需将它们添加在一起,它可能会抱怨它们不相关)然后 rebase 您对导入的历史记录所做的更改。

其他提示

去完成 蒂洛好答案, ,一旦您将 svn 存储库导入到 git 存储库中,您就可以使用脚本将该 git 存储库添加到您的存储库中,详细信息请参阅 合并不相关的 git 分支

#!/bin/bash

set -e

if test -z "$2" -o -n "$3"; then
    echo "usage: $0 REPO BRANCHNAME" >&2
    exit 1
fi

repo=$1
branch=$2

git fetch "$repo" "$branch"

head=$(git rev-parse HEAD)
fetched=$(git rev-parse FETCH_HEAD)
headref=$(git rev-parse --symbolic-full-name HEAD)

git checkout $fetched .

tree=$(git write-tree)

newhead=$(echo "merged in branch '$branch' from $repo" | git commit-tree $tree -p $head -p $fetched)
git-update-ref $headref $newhead $head
git reset --hard $headref

其他方法包括:

  • 尝试“简单” git pull REPO BRANCH
  • 使用 gitrafts 恢复 svn 合并历史记录 通过在 .git/info/grafts 创建一个文本文件,其中每一行包含一个提交 ID,后跟其父级。从此以后,您的本地存储库将表现得好像该提交实际上是来自父母双方的。
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top