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

时间:2009-03-10 06:28:58

标签: svn git github git-svn

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

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

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

2 个答案:

答案 0 :(得分:8)

要完成Thilogood answer,一旦将svn repo导入git,您可以使用 {{3中详述的脚本将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
  • merging in unrelated git branches 通过在.git / info / grafts中创建一个文本文件,其中每行包含一个提交ID,后跟其父项。从那时起,您的本地存储库将表现为该提交实际上来自父母双方。

答案 1 :(得分:6)

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