gpt4 book ai didi

git - 轻松地将旧 svn 存储库中的错误修复复制到新的 git 存储库中。

转载 作者:太空狗 更新时间:2023-10-29 12:54:51 25 4
gpt4 key购买 nike

我们已将大部分代码库从单一的 svn 存储库转移到一组 git 存储库中。由于各种原因,一些工作(在现场部署的项目的旧版本上)必须在旧的 svn 分支中继续,在它们被移动到 git 并从中删除之后颠覆 trunk

我刚刚在 svn 分支上完成了一些这样的工作,并将 svn 存储库中的更改重新应用到 git 存储库中通过执行以下操作:

cd <common_svn_commit_root>
svn diff -r 12344:12345 > ~/r12345.diff
gedit ~/r12345.diff
cd <common_git_commit_root>
git apply ~/r12345.diff

但是对每次 svn 提交都执行此操作相当麻烦,尤其是 gedit 步骤,我必须手动修改 svn 路径到 git 路径(通常在顶级目录名称前加上前缀)。

尝试目前提供的一些选项的一个问题是旧的 svn 存储库和新的 git 存储库的结构不同。这是我必须编辑补丁文件的原因之一。

旧的目录结构是

svn
configurations
blah
mine
blam
plugins
foo
core
mine
bar

而新结构是

svn
plugins
bar
git
my_git
my_config
plugins
mine
core_git
plugins
core
foo_git
plugins
foo

我真的很想知道是否有更简单的方法来执行此操作,并了解针对这种情况的最佳做法是什么。

最佳答案

您可以使用 git svn 将您的 git 存储库与来自 svn 的更改同步。

git svn --authors-file=authors.txt clone https://repo/svn/reponame/trunk reponame-git-svn

# if something aborts:
cd reponame-git-svn
git svn fetch

# create a new branch
git checkout -b dvcs

git remote add dvcs-svn https://repo/git/reponame.git

这将使您在 git 分支中获得 svn 源代码。从 svn 同步到 git:

git checkout master
# get the changes from svn
git svn rebase
git checkout dvcs

# apply the changes from svn
git rebase master

# fetch the changes from git repo to the local repo
git fetch dvcs-svn

# apply the changes from git repo to the branch dvcs
git rebase dvcs-svn/master

# push all changes back to git repo
git push dvcs-svn dvcs:master

我们对 rebase 的体验比对 merge 的体验更好。希望这也能帮到您。

关于git - 轻松地将旧 svn 存储库中的错误修复复制到新的 git 存储库中。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11332191/

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