我已经有一个svn只读的repo签出(svn co而不是git svn).我已经做了一些更改并使用git提交,然后将其推送到github.
此时,git没有来自svn的所有历史记录.我想知道是否有办法在此时提取和导入它.
各种git-svn指南显示了如何导入一个干净的仓库并传输历史记录,但不是我能找到的已经使用过的记录.
为了完成Thilo的好答案,一旦你将svn repo导入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
使用git grafts通过在.git/info/grafts中创建一个文本文件来恢复svn合并历史记录,其中每一行包含一个提交ID,后跟其父项.从那时起,您的本地存储库将表现为该提交实际上来自父母双方.
你可能会做一个svn导入到一个新的git仓库,合并两个库(只加在一起,它可能会抱怨他们是无关的),然后重订你对进口的历史所做的更改.