所以我使用svn2git将SVN存储库转换为git存储库,因为我假设在svn存储库上不再有任何工作.然而,其他人不知道我们正在切换到git(它有点复杂,但他基本上只是在处理一个特定的文件)所以他做了一些提交给SVN.现在我想把这些提交变成git.我还能这样做,还是svn2git完全单向?
如果没有,有没有办法从SVN提交生成补丁,类似于git format-patch?我似乎无法从粗略的搜索中找到一个; 似乎SVN开发人员从未想过你会想要将提交转换为补丁.
anr*_*r78 16
svn2git现在支持--rebase.从(当前)文档:
从svn2git 2.0开始,有一个新功能可以将SVN的最新更改引入到使用svn2git创建的git存储库中.这是单向同步,但允许您使用svn2git作为SVN存储库的镜像工具.
要调用的命令是:
Run Code Online (Sandbox Code Playgroud)$ cd <EXISTING_REPO> && svn2git --rebase
从你的描述中可以看出,Subversion中你只想提取一些提交.最直接的方法是手动提取和应用每个补丁,我将在此概述.首先,您可以使用该svn diff命令来提取差异("差异"在功能上等同于"补丁").
svn diff -r 101:102
Run Code Online (Sandbox Code Playgroud)
这将显示版本101和102之间的差异.您可以将此输出重定向到文件以供下一步使用:
svn diff -r 101:102 >r102.patch
Run Code Online (Sandbox Code Playgroud)
在Git存储库中,从上一步中获取diff并使用该patch程序应用它:
patch -p0 <r102.patch
Run Code Online (Sandbox Code Playgroud)
该-p0告诉patch程序如何寻找在补丁命名的文件(S).最后,将更改提交给Git:
git add -u
env GIT_AUTHOR_NAME="new name" GIT_AUTHOR_EMAIL="new email" git commit
Run Code Online (Sandbox Code Playgroud)
该GIT_AUTHOR_*环境变量允许您保留原作者信息,这可能是历史的维护非常有用.
以上应该对文本文件足够容易,但如果Subversion中任何更改的文件恰好是二进制文件,则必须使用稍微不同的技术(在这种情况下,Subversion将拒绝生成有用的diff).在提交之前,只需将每个Subversion修订版中的文件复制到Git存储库,而不是提取补丁和应用.如果您愿意,这对文本文件也可以正常工作.
| 归档时间: |
|
| 查看次数: |
5166 次 |
| 最近记录: |