Git管理SVN项目
kevin
•
2025-03-07 16:27
前提条件:
- 必须安装带有
git-svn
功能的 Git for Windows - 在官方 Git for Windows 安装包中,默认情况下是包含
git-svn
的。如果您在命令行输入git svn --version
能够看到正常输出,则说明环境已正确配置。 -
如果提示找不到
git svn
,需要在安装 Git 时选择安装 “Git SVN” 组件或自行安装 Subversion(可通过 Slik SVN 或其他方式)并确保其在PATH
中。 -
本地若有其他版本的 SVN 客户端(如 TortoiseSVN)
-
一般不会与
git svn
冲突,但如果出现冲突,可以在系统环境变量中调整顺序,使 Git 自带的 svn 或安装的 SlikSVN 路径排在前面。 -
确保网络和 SVN 访问权限
- 需要能正常访问 SVN 仓库地址(可能需要 VPN 或内部网络)。
命令与解释
下面示例中,<SVN_URL>
表示您 SVN 仓库的访问地址,例如 http://example.com/svn/myrepo
;<CLONE_DIRECTORY>
表示本地目录名称,例如 my-svn-repo
。请根据实际情况替换。
1. 克隆 SVN 仓库到本地并初始化为 Git 仓库
git svn clone <SVN_URL> <CLONE_DIRECTORY>
- 作用:
- 从远程 SVN 仓库拉取所有历史记录。
-
在本地创建一个含有完整 SVN 提交历史的 Git 仓库。
-
可选参数:
-T trunk -b branches -t tags
:如果您的 SVN 仓库遵循标准的trunk/branches/tags
目录结构,可带上此参数让 Git 更好地识别分支结构。--username <username>
:如果访问 SVN 需要用户名,可添加该选项。
2. 进入克隆后的目录,查看日志或状态
cd <CLONE_DIRECTORY>
git log
- 作用:
cd <CLONE_DIRECTORY>
进入新克隆的仓库目录。git log
可查看已经导入到本地的 SVN 提交日志。
3. 正常使用 Git 管理代码
在此阶段,您已经拥有了一个本地 Git 仓库(背后还映射着 SVN 的信息)。可以像使用普通 Git 仓库一样进行修改并提交:
# 编辑文件后
git add .
git commit -m "Your commit message"
- 作用:
git add .
:将所有更改添加到暂存区。git commit -m "Your commit message"
:在本地 Git 中提交更改。
4. (可选)使用 git stash
暂存本地未提交的修改
当您想要从 SVN 拉取最新更新、并确保在执行 rebase 前工作区是干净的,可以先使用 git stash
暂存修改:
git stash
- 作用:
- 将当前工作区和暂存区中的更改暂存起来,并恢复到干净的工作状态。
- 后续需要继续这部分修改时,可用
git stash pop
还原。
5. 使用 git svn rebase
拉取 SVN 仓库最新修改
git svn rebase
- 作用:
- 从 SVN 仓库拉取最新提交,并将本地的 Git 提交在其之上进行 “rebase” 操作。
- 如果有冲突,需要手动解决,然后继续
git rebase --continue
。
如您在之前执行了
git stash
,在 rebase 成功后,可执行git stash pop
还原刚才暂存的工作进度。
6. 提交本地改动到 SVN 仓库
git svn dcommit
- 作用:
- 将本地的 Git 提交记录转化为 SVN 提交,并推送到远程 SVN 仓库。
- 一旦执行成功,SVN 服务端就会出现对应的提交记录,其他使用纯 SVN 的同事也可见。
7. (若还需推送到 Git 远程仓库)使用 git push
如果您 同时 维护一个远程 Git 仓库(比如 GitHub、GitLab 或公司内部的 Git 服务器),在完成对 SVN 的 dcommit
之后,就可以将本地的更新再推送到 Git 服务器上:
git push origin main
- 作用:
- 将本地
main
分支上的提交推送到名为origin
的远程仓库。 - 此处的远程仓库与 SVN 无关,而是一个纯粹的 Git 仓库。
总结
- 以上操作在 Windows 11 下是完全可行的,只要确保 Git for Windows 安装包含
git-svn
功能或安装好支持 SVN 的工具链。 - 核心命令是:
git svn clone
—— 将 SVN 仓库克隆成本地 Git 仓库git svn rebase
—— 从 SVN 同步最新代码git svn dcommit
—— 将本地修改提交回 SVN- 如果还要同步到 Git 远程分支,则再加上常用的
git push
。
通过这种方式就可以“一库两用”,既能与 SVN 同事保持同步,也能享受 Git