美文网首页
用GIT操作SVN

用GIT操作SVN

作者: Jack0111 | 来源:发表于2018-10-23 15:40 被阅读0次

由于习惯了 GIT 版本管理,切回 SVN 落差太大.下面总结用 GIT 操作 SVN.

一.原理

1.本地仓库以 GIT 方式管理,远程以 SVN 方式管理.

2.每个 GIT 分支都有唯一的SVN分支(根),推送服务器时,只能推到这个 SVN 分支,不能推送到新建 SVN 分支.

3.采用GIT 提供了 git-svn 命令工具可以操作 SVN.

二.实践

1.环境配置

1.1.安装GIT(略).

1.2.安装 SourceTree(可选.略)

2.克隆 SVN 到 GIT

2.1.命令

git svn init <SVN_PATH> <LOCAL_PATH> [可选参数]

git svn fetch

或者

git svn clone <SVN_PATH> <LOCAL_PATH> [可选参数]

2.2.例子

git svn clone 命令是 git svn init 与 git svn fetch 命令的合并.

git svn clone -T trunk -b branches -t tags https://github.com/xetorthio/jedis.git /develop/code/jedis

--使用标准结构初始化 GIT-SVN仓库.

git svn init https://github.com/xetorthio/jedis.git /develop/code/jedis -s

--获取指定变更集代码(注间:若SVN 变更集过多,获取整个变更需要花费几天的时间,因为每个变更都会拉取一次)

git svn fetch --revision 5572:HEAD

输出

r5572 = b17002fa989eaf6d5e86d91cae5d75458eec0540 (refs/remotes/origin/trunk)

...

r5573 = 0eb64f068b12634cbb27dbfee87cfdd6a539d58d (refs/remotes/origin/2.10)

...

r5574 = 82cd4fa8074f33bcbea967f74eb18c1a32304c90 (refs/remotes/origin/2.10)

Checked out HEAD:

https://github.com/xetorthio/jedis.git/trunk r5572

-T trunk -b branches -t tags 用于指定 SVN 主干,分支,标记目录.如果是标准目录,则可以使用-s或者--stdlayout

查看仓库分支信息

git branch -a

* master

remotes/origin/2.10

remotes/origin/trunk

2.3.参数说明

-T<trunk_subdir> [--trunk=<trunk_subdir>] <指定 SVN trunk目录>

-t<tags_subdir>  [--tags=<tags_subdir>] <指定SVN tags根目录>

-b<branches_subdir> [--branches=<branches_subdir>] <指定 SVN branches根目录>

-s [--stdlayout] <采用标准 SVN 目录结构trunk,branches,tags>

--prefix=<prefix> <refs/remotes/$prefix/用于指定远程引用前辍,默认为 origin/>

-r <arg> [--revision <arg>]  <下载指定范围的版本,支持后机的格式$NUMBER, $NUMBER1:$NUMBER2 (numeric ranges), $NUMBER:HEAD, and BASE:$NUMBER>

3.提交

3.1.命令

git commit(就是GIT操作)

4.推送

4.1.命令

git svn dcommit

6.分支建立

6.1.命令

git svn branch

git svn tag

7.更新

7.1.命令

git svn rebase

8.仓库配置文件

存储位置<git_dir>/config

[svn-remote "project-a"] url = http://server.org/svn fetch = trunk/project-a:refs/remotes/project-a/trunk branches = branches/*/project-a:refs/remotes/project-a/branches/* branches = branches/release_*:refs/remotes/project-a/branches/release_* branches = branches/re*se:refs/remotes/project-a/branches/* tags = tags/*/project-a:refs/remotes/project-a/tags/*

注意:

1:冒号右边为本地GIT引用,只能在引用最右添加一个星号(*)通配符.

2.冒号左边是SVN 服务器径径,只能添加一个星号(*)通配符,位置可以随意添加.(多个时会报错)

3.分支和标记也可以使用逗号分隔的集合,例如:

[svn-remote "huge-project"] url = http://server.org/svn fetch = trunk/src:refs/remotes/trunk branches = branches/{red,green}/src:refs/remotes/project-a/branches/* tags = tags/{1.0,2.0}/src:refs/remotes/project-a/tags/*

4.支持多个 fetch,branches,tags 配置.

三.命令大全

Available commands:

blame Show what revision and author last modified each line of a file

--git-format

branch Create a branch in the SVN repository

--commit-url <arg>

--destination, -d <arg>

--dry-run, -n

--message, -m <arg>

--parents

--tag, -t

--username <arg>

clone Initialize and fetch revisions

--add-author-from

--authors-file, -A <arg>

--authors-prog <arg>

--branches, --b=s@

--config-dir <arg>

--follow-parent, --follow!

--ignore-paths <arg>

--ignore-refs <arg>

--include-paths <arg>

--localtime

--log-window-size <num>

--minimize-url, --m!

--no-auth-cache

--no-checkout

--no-metadata

--placeholder-filename <arg>

--prefix <arg>

--preserve-empty-dirs

--quiet, --q+

--repack-flags, --repack-args, --repack-opts <arg>

--repack <num>

--revision, -r <arg>

--rewrite-root <arg>

--rewrite-uuid <arg>

--shared <arg>

--stdlayout, -s

--tags, --t=s@

--template <arg>

--trunk, -T <arg>

--use-log-author

--use-svm-props

--use-svnsync-props

--username <arg>

commit-diff Commit a diff between two trees

--copy-similarity, -C <num>

--edit, -e

--file, -F <arg>

--find-copies-harder

-l <num>

--message, -m <arg>

--revision, -r <arg>

--rmdir

create-ignore Create a .gitignore per svn:ignore

--revision, -r <num>

dcommit Commit several diffs to merge with upstream

--add-author-from

--authors-file, -A <arg>

--authors-prog <arg>

--commit-url <arg>

--config-dir <arg>

--copy-similarity, -C <num>

--dry-run, -n

--edit, -e

--fetch-all, --all

--find-copies-harder

--follow-parent, --follow!

--ignore-paths <arg>

--ignore-refs <arg>

--include-paths <arg>

--interactive, -i

-l <num>

--localtime

--log-window-size <num>

--mergeinfo <arg>

--merge, -m, -M

--no-auth-cache

--no-checkout

--no-rebase

--quiet, --q+

--repack-flags, --repack-args, --repack-opts <arg>

--repack <num>

--revision, -r <num>

--rmdir

--set-svn-props <arg>

--strategy, -s <arg>

--use-log-author

--username <arg>

--verbose, -v

fetch Download new revisions from SVN

--add-author-from

--authors-file, -A <arg>

--authors-prog <arg>

--config-dir <arg>

--fetch-all, --all

--follow-parent, --follow!

--ignore-paths <arg>

--ignore-refs <arg>

--include-paths <arg>

--localtime

--log-window-size <num>

--no-auth-cache

--no-checkout

--parent, -p

--quiet, --q+

--repack-flags, --repack-args, --repack-opts <arg>

--repack <num>

--revision, -r <arg>

--use-log-author

--username <arg>

find-rev Translate between SVN revision numbers and tree-ish

-A, --after

-B, --before

gc Compress unhandled.log files in .git/svn and remove index files in .git/svn

info Show info about the latest SVN revision

on the current branch

--url

init Initialize a repo for tracking (requires URL argument)

--branches, --b=s@

--config-dir <arg>

--ignore-paths <arg>

--ignore-refs <arg>

--include-paths <arg>

--minimize-url, --m!

--no-auth-cache

--no-metadata

--prefix <arg>

--rewrite-root <arg>

--rewrite-uuid <arg>

--shared <arg>

--stdlayout, -s

--tags, --t=s@

--template <arg>

--trunk, -T <arg>

--use-svm-props

--use-svnsync-props

--username <arg>

log Show commit logs

--authors-file, -A <arg>

--color

--incremental

--limit <num>

--non-recursive

--oneline

--pager <arg>

--revision, -r <arg>

--show-commit

--verbose, -v

migrate Migrate configuration/metadata/layout from

previous versions of git-svn

--config-dir <arg>

--ignore-paths <arg>

--ignore-refs <arg>

--include-paths <arg>

--minimize

--no-auth-cache

--username <arg>

mkdirs recreate empty directories after a checkout

--revision, -r <num>

propget Print the value of a property on a file or directory

--revision, -r <num>

proplist List all properties of a file or directory

--revision, -r <num>

propset Set the value of a property on a file or directory - will be set on commit

rebase Fetch and rebase your working directory

--add-author-from

--authors-file, -A <arg>

--authors-prog <arg>

--config-dir <arg>

--dry-run, -n

--fetch-all, --all

--follow-parent, --follow!

--ignore-paths <arg>

--ignore-refs <arg>

--include-paths <arg>

--localtime

--local, -l

--log-window-size <num>

--merge, -m, -M

--no-auth-cache

--no-checkout

--preserve-merges, -p

--quiet, --q+

--repack-flags, --repack-args, --repack-opts <arg>

--repack <num>

--strategy, -s <arg>

--use-log-author

--username <arg>

--verbose, -v

reset Undo fetches back to the specified SVN revision

--parent, -p

--revision, -r <arg>

set-tree Set an SVN repository to a git tree-ish

--add-author-from

--authors-file, -A <arg>

--authors-prog <arg>

--config-dir <arg>

--copy-similarity, -C <num>

--edit, -e

--find-copies-harder

--follow-parent, --follow!

--ignore-paths <arg>

--ignore-refs <arg>

--include-paths <arg>

-l <num>

--localtime

--log-window-size <num>

--no-auth-cache

--no-checkout

--quiet, --q+

--repack-flags, --repack-args, --repack-opts <arg>

--repack <num>

--rmdir

--stdin

--use-log-author

--username <arg>

show-externals Show svn:externals listings

--revision, -r <num>

show-ignore Show svn:ignore listings

--revision, -r <num>

tag Create a tag in the SVN repository

--commit-url <arg>

--destination, -d <arg>

--dry-run, -n

--message, -m <arg>

--parents

--username <arg>

GIT_SVN_ID may be set in the environment or via the --id/-i switch to an

arbitrary identifier if you're tracking multiple SVN branches/repositories in

one git repository and want to keep them separate. See git-svn(1) for more

information.

相关文章

  • Git-Svn 命令的使用

    git提供了 git-svn命令,让我们可以用git来操作svn,提交、更新、解决冲突,看本文章之前,希望你已经有...

  • 用GIT操作SVN

    由于习惯了 GIT 版本管理,切回 SVN 落差太大.下面总结用 GIT 操作 SVN. 一.原理 1.本地仓库以...

  • SVN迁移Git

    参考:GIt - 迁移到Git 构建user.txt 关联svn用户和git用户。 用git svn导入svn库 ...

  • Svn && Git

    1.mac 终端Svn操作 2.mac终端Git操作

  • git文件忽略

    附录:git文件忽略操作参考git官方各大IDE、框架忽略集合 1、从svn转到git,有将项目中的svn文件删除...

  • git基本操作整理

    git基本操作整理 之前用的svn,很少使用命令,如今要使用gitlab,所以整理一下 git 的简单用法。 基本...

  • Git的使用笔记整理(手把手那种!)

    来源 已不可考 新的支线: 操作git git: 和svn一样,它都是代码管理的工具 git 和 svn的唯一区...

  • Git和SVN比较

    Git和SVN功能相似:都有提交,合并等操作,都是源码管理工具的基本操作。 1.Git是分布式的,SVN是集中式的...

  • 用command line把代码上传到github

    开始从事iOS开发时候用的是git客户端,也有两年没用了吧,公司都是用的svn,最近又想搞git了,之前有操作过客...

  • Svn与Git的区别

    平时用git比较多,突然老师让装SVN,所以就了解了一下git和svn的区别 Git是分布式,但是Svn不是 Gi...

网友评论

      本文标题:用GIT操作SVN

      本文链接:https://www.haomeiwen.com/subject/ubdazftx.html