如果你不想提交怎么办? 一切 你在Git中提交到SVN存储库?如果您只是想有选择地向管道发送提交怎么办?好吧,我有一个更好的解决方案。
我保留了一个本地Git存储库,我所做的就是从SVN获取和合并。这样我可以确保我包含与SVN相同的所有更改,但是我将提交历史与SVN完全分开。
然后我保留一个单独的SVN本地工作副本,该副本位于单独的文件夹中。那是我做的那个提交回SVN,我只是使用SVN命令行实用程序。
当我准备将我的本地Git存储库状态提交给SVN时,我只需将整个文件复制到本地SVN工作副本中,然后使用SVN而不是Git从那里提交它。
这样我就不必做任何变基,因为变基就像自由基。
我会建议使用4个命令进行非常简短的指令 SubGit 。看到这个 岗位 详情。
有三种方法:r
如另一个答案那样
commit id:找到svn first commit id和git first commit id,将它们回显到.git / info / grafts: echo "git_id svn_id}" > .git/info/grafts 然后 git svn dcommit
echo "git_id svn_id}" > .git/info/grafts
git svn dcommit
checkout每个git commit,将文件复制到svn_repo,svn commit
bash demo:n github演示
v1.x:使用rebase和commit id
v2.x:使用copy文件,然后使用svn commit
就我而言,我不得不从SVN开始一个干净的项目
$ Project> git svn init protocol://path/to/repo -s $ Project> git svn fetch
添加所有项目源...
$ Project> git add . $ Project> git commit -m "Importing project sources" $ Project> git svn dcommit
我最近不得不将几个Git存储库迁移到SVN,在尝试了我能找到的所有解决方案后,最终对我有用的是 水银 (是的,使用 第三 VCS)。运用 本指南 ,我提出了以下过程(在Linux上,但基本的想法也适用于Windows)。
必要的包裹:
$ sudo apt-get install git subversion mercurial python-subversion
需要通过添加以下内容来配置Mercurial ~/.hgrc :
~/.hgrc
[extensions] hgext.convert=
创建一些临时工作目录(我有几个要迁移的存储库,所以我为SVN和Git版本创建了目录,以保持它们分开):
$ mkdir svn $ mkdir git
创建一个空的本地SVN存储库:
$ svnadmin create svn/project
克隆现有的Git存储库:
$ git clone server/path/project.git git/project
让Mercurial做它的事情:
$ hg convert --dest-type svn git/project svn/project
现在,SVN存储库应包含完整的提交历史记录,但不包含原始时间戳。如果这不是问题,请跳过下一部分到第11步。
做一点工作, 每次提交的日期和时间都可以更改 。由于我的存储库相当小,我可以手动完成。首先,创建一个 pre-revprop-change 使用以下内容挂钩SVN存储库,以允许修改必要的属性:
pre-revprop-change
#!/bin/bash exit 0;
必须使此脚本可执行:
$ chmod +x svn/project/hooks/pre-revprop-change
Mercurial创建了一个名为的SVN存储库的工作副本 项目 -wc,所以切换到它并编辑提交时间:
$ cd project-wc $ svn propedit svn:date --revprop -r 1
输入正确的日期和时间(注意时区!)并保存。您应该收到一条消息“为属性svn设置新值:修订版本1上的日期”。 现在冲洗并重复每次其他修订。
(可选)检查提交历史记录以确保一切正常:
$ svn log -r 1:HEAD
然后回到一个级别:
$ cd ..
转储存储库:
$ svnadmin dump svn/project > project.dump
并在Subversion服务器上加载转储。完成!
这个过程可能也会直接在远程存储库之间工作,但我发现使用本地存储库更容易。修复提交时间是很多工作,但总的来说,这个过程比我找到的任何其他方法都要简单得多。