前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SVN或者GIT远程双向同步

SVN或者GIT远程双向同步

作者头像
HHTjim 部落格
发布2022-09-26 10:31:08
1.5K0
发布2022-09-26 10:31:08
举报
文章被收录于专栏:HHTjim'S 部落格

SVN或者GIT远程双向同步

作者:matrix 被围观: 539 次 发布时间:2021-09-03 分类:零零星星 | 一条评论 »

现在我需要svn或者git的提交同步到其他远程仓库(svn或git),也就是同步操作。这里的同步最小单位为单次的提交commit。

配合之前的「使用git-svn管理svn仓库」可以完美解决这个问题,利用git来中转管理我们手上的仓库代码。

场景:

有多个相同代码的SVN仓库,我不想全部迁移到git。然而每次修改一个功能的代码就必须手动复制到其他的远程svn/git仓库上,代码相似但又不能直接替换。。。

之前使用git cherry-pick可以解决这个问题,但是要单独给svn用就会很麻烦。尝试用git svn中转试试!

1. 本地添加远程仓库

如果是svn仓库,先使用git svn clone svn://xxx.com/xxx克隆svn仓库到本地

2. 本地添加远程仓库

  • 添加远程SVN仓库:

没有找到命令行的方式添加远程仓库分支,但是可以修改 .git/config文件达到目的。

项目/.git/config文件中新增svn-remote配置:

代码语言:javascript
复制
[core]
    ...
[svn-remote "svn"]
    ...
[svn-remote "qingsui"]
     url = svn://xxxx/qingsui
     fetch = :refs/remotes/git-svn-qingsui
  • 添加远程git仓库: 可以直接使用git命令添加:
代码语言:javascript
复制
 $ git remote add remote-repository-name https://git.weixin.qq.com/xxx.git

注意:remote-repository-name 为自定义的分支名

3. 拉取远程代码

  • 远程SVN仓库:
代码语言:javascript
复制
$ git svn fetch  qingsui

如果需要pull操作来自动更新合并执行命令git svn rebase

  • 远程git仓库:
代码语言:javascript
复制
$  git fetch remote-repository-name

4.新建对应的本地分支

  • 远程SVN仓库:
代码语言:javascript
复制
$ git checkout -b qingsui  remotes/git-svn-qingsui

$ git branch -a # 查看本地分支情况
  • 远程git仓库:
代码语言:javascript
复制
$  git checkout -b remote-repository-name remotes/remote-repository-name/master

5. 将commit提交合并到新分支

commit_id是需要同步到其他远程分支的commit id。

代码语言:javascript
复制
$ git cherry-pick  {commit_id}

6. 推送修改到远程仓库

  • SVN仓库:
代码语言:javascript
复制
$ git svn dcommit
  • git仓库:
代码语言:javascript
复制
$ git push

完美解决,实际上就是使用git来操作。

同步到远程svn仓库操作脚本

代码语言:javascript
复制
#!/bin/bash
#同步commit到其他远程仓库
#example:  shell.sh  dade,qingsui commitID1,commitID2
# dade,qingsui 为`git branch`本地分支名字
if [ ! $1 -o ! $2 ]; then
    echo -e "usage example:  \n $ shell.sh dade,qingsui commitID1,commitID2"
    exit
fi

repo_arr=(`echo $1 | tr ',' ' '`) 
commit_arr=(`echo $2 | tr ',' ' '`) 

for repo in ${repo_arr[@]};do
    for commit_id in ${commit_arr[@]};do
         git checkout $repo
         git svn rebase #git pull操作
         git cherry-pick $commit_id
         git svn dcommit
         git checkout master
        echo -e "\n"
    done
done

说明:

如果自动合并有冲突会操作会失败,需要手动修改再提交&推送。

如果需要git-svn自动输入密码>> https://cloud.tencent.com/developer/article/2121836

参考:

https://coderwall.com/p/vfop7g/add-an-svn-remote-to-your-git-repo

https://superuser.com/questions/354819/git-svn-pass-password-on-command-line

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-09-03 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • SVN或者GIT远程双向同步
    • 1. 本地添加远程仓库
      • 2. 本地添加远程仓库
        • 3. 拉取远程代码
          • 4.新建对应的本地分支
            • 5. 将commit提交合并到新分支
              • 6. 推送修改到远程仓库
                • 同步到远程svn仓库操作脚本
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档