有没有办法在事后将svn历史导入git?

有没有办法在事后将svn历史导入git?,svn,git,github,git-svn,Svn,Git,Github,Git Svn,我已经签出了svn只读回购协议(svn co而不是git svn)。我使用git做了一些更改和提交,然后将git推送到github 在这一点上,git并没有来自svn的所有历史记录。我想知道在这一点上是否有一种方法可以提取和导入这个 各种git svn指南展示了如何导入干净的回购并传输历史记录,但我找不到已经在使用的历史记录。您可能需要将svn导入到新的git存储库中,合并两个存储库(只需将它们添加在一起,它可能会抱怨它们不相关)然后是您对导入的历史记录所做的更改。要完成,将svn repo导入

我已经签出了svn只读回购协议(svn co而不是git svn)。我使用git做了一些更改和提交,然后将git推送到github

在这一点上,git并没有来自svn的所有历史记录。我想知道在这一点上是否有一种方法可以提取和导入这个


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

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

要完成,将svn repo导入git repo后,您可以使用脚本将该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回购分支机构
  • 通过在.git/info/grafts创建一个文本文件,其中每行包含一个提交id,后跟其父行。此后,您的本地存储库的行为就好像该提交实际上是从双亲继承的一样