`

git-svn 常用功能示例

阅读更多

git-svn 常用功能示例

 

版本的要求

务必保证 git-core 和 git-svn 的版本大于 1.5.3,这里使用的版本为 1.5.4.2-1~bpo40+2。

svn 仓库

我们这里以 Google Code Hosting 提供的 svn 仓库为原型虚拟了一个:

用户名和密码分别为: zhang, ftpw

建立工作目录

1$ mkdir /tmp/virtual && cd /tmp/virtual
2$ git-svn init https://virtual.googlecode.com/svn/trunk

 . --username=zhang
3$ git-svn fetch
4$ ls -F
 debian/  HOME/  README  TODO

新建目录(1),并将该目录作为 git-svn 的工作目录(2),用户名为 zhang。获取 svn 仓库内的数据(3),此时需要输入密码 ftpw。查看获取到的文件列表(4)。

示例1 修改数据后提交至 svn 仓库(理想情况)

提交/签入(commit/check in),这是使用工具操作版本管理系统的基本动作。

1$ echo "有一天我梦到自己在考试" >> README
2$ echo "醒来的时候我果然在考试" >> TODO
3$ git-commit -a -m "小笑话"
Created commit 8fb8ee7: 小笑话
 2 files changed, 2 insertions(+), 0 deletions(-)
 4$ git-svn rebase
5$ git-svn dcommit
Committing to https://virtual.googlecode.com/svn/trunk

 ...
    M   README
    M   TODO
Committed r10
    M   TODO
     M   README
r10 = 7123a9eb252c31a2fcbd1c2908642fa6794fe687 (git-svn)
No changes between current HEAD and refs/remotes/git-svn
Resetting to the latest refs/remotes/git-svn

修改若干文件(1, 2),此后,您可以像使用 svn status/svn diff 一样使用 git-status/git-diff 来查看修改情况。确定修改完成后提交至本地仓库(3)。在正式提 交给 svn 仓库之前(5),从 svn 仓库获取最新的数据(4)对您的提交动作来说非常重要。 这里假设的理想情况是在您正式提交给 svn 仓库之前,svn 仓库没有发生更新。

示例2 修改数据后提交至 svn 仓库(发生冲突)

在提交/签入(commit/check in)过程中,发生了合并冲突(CONFLICT)时的基本动作。

1$ vi debian/changelog
   ...
2$ git-commit -a -m "发布一个新版本"
Created commit 934b74c: 发布一个新版本
 1 files changed, 6 insertions(+), 0 deletions(-)
3$ git-svn rebase
    M   debian/changelog
 r11 = ae2199620a1e66130e12d03bd48a66c8edddc195 (git-svn)
First, rewinding head to replay your work on top of it...
HEAD is now at ae21996... New Upstream Released
Applying 发布一个新版本
error: patch failed: debian/changelog:1
 error: debian/changelog: patch does not apply
Using index info to reconstruct a base tree...
Falling back to patching base and 3-way merge...
Auto-merged debian/changelog
CONFLICT (content): Merge conflict in debian/changelog
 Failed to merge in the changes.
Patch failed at 0001.

When you have resolved this problem run "git rebase --continue".
If you would prefer to skip this patch, instead run "git rebase --skip".
 To restore the original branch and stop rebasing run "git rebase --abort".

rebase refs/remotes/git-svn: command returned error: 1
4$ vi debian/changelog
   ...
5$ git-commit -a -m "冲突解决后发布的最新版本"
 Created commit b899d8b: 冲突解决后发布的最新版本
 1 files changed, 2 insertions(+), 1 deletions(-)
6$ rm -rf .dotest
7$ git-svn rebase
Current branch HEAD is up to date.
8$ git-svn dcommit
Committing to https://virtual.googlecode.com/svn/trunk

 ...
     M   debian/changelog
Committed r12
    M   debian/changelog
r12 = cc5b21aaf77a2952b4a3fa74a80cbdd826f28d92 (git-svn)
No changes between current HEAD and refs/remotes/git-svn
Resetting to the latest refs/remotes/git-svn

将平日修改的文件(1),提交到本地 git 仓库(2)。在提交至 svn 仓库前,先获取 svn 仓库的最新数据(3)。此时发现 debian/changelog 文件在 svn 仓库中已被更新,由于我 们平日也对 debian/changelog 文件作过修改,这就导致该文件出现了合并冲突。手工修 改该文件解决冲突(4),然后重新提交至本地 git 仓库(5)。准备重新提交至 svn 仓库 (8),保险起见,我们再一次获取 svn 仓库的最新数据(7),为此要先删除因刚才(3)操作 失败带来的临时目录 .dotest(6)。(或许存在更好的解决 .dotest 目录的方法。)

示例3 修改提交至本地 git 仓库时的留言

有时候我们希望能在 git-commit 之后修改当时 -m 参数后面的留言,如下例中对拼写错 误的修改

1$ touch foo
2$ git-add foo
3$ git-commit -a -m "New flie"
4$ git-commit --amend
5$ git-rebase
Current branch HEAD is up to date.
6$ git-svn dcommit
Committing to https://virtual.googlecode.com/svn/trunk

 ...
     A   foo
Committed r13
    A   foo
r13 = 9f9db8db023de576f8ac63c993619218febbb74d (git-svn)
No changes between current HEAD and refs/remotes/git-svn
Resetting to the latest refs/remotes/git-svn
7$ mkdir /tmp/test && cd /tmp/test
 8$ svn co https://virtual.googlecode.com/svn/trunk

 . --username=zhang
9$ svn log
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
r13 | zhang | 2008-03-09 22:08:37 +0800 (日, 09  3月 2008) | 2 lines
 
New file

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
r12 | zhang | 2008-03-09 21:07:24 +0800 (日, 09  3月 2008) | 2 lines

冲突解决后发布的最新版本

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 r11 | s5unty | 2008-03-09 20:56:39 +0800 (日, 09  3月 2008) | 1 line

New Upstream Released

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
r10 | zhang| 2008-03-09 20:44:57 +0800 (日, 09  3月 2008) | 2 lines
 
小笑话
   ...

新建一个文件 foo(1)并添加至本地 git 仓库(2),然后提交(3)。此时我们发现刚才提交 的留言中错把 file 拼写成了 flie,现在进行修改(4)。然后提交给 svn 仓库并观察日 志(5-9)。

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    git-svn-helpers:使 git-svn 变得简单的命令行工具

    git-svn-helpers 是一个命令行工具的集合,它极大地简化了 git for svn 存储库的使用。 它的主要目标是在现有的 svn checkout 之后设置一个本地 git 存储库,“无需动脑筋”。 它还解决了使用单个 git-svn 存储库...

    vscode添加GIT和SVN的方法示例

    在开发环境中,版本控制工具是不可或缺的,Visual Studio Code (VSCode) 作为一个强大的源代码编辑器,提供了集成Git和Subversion(SVN)的功能。本文将详细介绍如何在VSCode中添加和配置这两种版本控制系统。 ### ...

    git-prov:该项目尝试从Github API提取数据并将其转换为RDF格式(更具体地讲是PROV),以便使机器可以追溯工件的来源

    git-prov 可以在找到Git-Prov API规范 GET / repos / organizations / {organization} 获取到组织拥有的所有存储库的重定向列表。... "https://git-prov.herokuapp.com/repos/owner/Apache/sling-old-svn

    svn2git.zip

    在svn2git-master目录中,我们可以预期找到该工具的源代码文件、配置文件、文档以及可能的示例或测试数据。用户可以通过解压这个zip文件,然后在他们的Ruby环境中运行svn2git工具,按照提供的说明来执行迁移过程。 ...

    git内部培训教程

    以上是基于给定文件内容的关键知识点总结,涵盖了Git的基本概念、初始化与克隆操作、文件的添加、删除及移动,以及状态查看和提交等常用操作。通过掌握这些基础内容,学习者能够更好地理解并运用Git进行项目版本控制...

    matlab说话代码-win32maple-svn:win32maple-svn

    为了在MATLAB中使用SVN进行版本控制,开发者可能会使用MATLAB的系统命令功能,如`system('svn commit -m "提交信息"')`来执行SVN命令。这使得在MATLAB环境中就可以方便地管理代码版本。 总的来说,这个项目可能包括...

    Git Bash安装,常用命令,使用示例说明,问题总结

    以上内容是对Git Bash安装、常用命令和使用示例的简要说明。在实际项目中,理解并熟练运用这些知识点能够极大地提高代码管理和协作的效率。如果你在阅读压缩包中的文件或本文后仍有疑问,欢迎留言提问,我将尽力为你...

    svn2git:基于快速导入的转换器,用于svn repo到git repos

    svn-all-fast-export aka svn2git 该项目包含将svn信息库(服务器端,而不是签出)转换为一个或多个git信息库所需的所有工具。 这是用于将KDE的Subversion转换为多个Git存储库的工具。 您可以在找到更多描述和用法...

    深入理解学习Git工作流(git-workflow-tutorial)

    这篇指南以大家在SVN中已经广为熟悉使用的集中式工作流作为起点,循序渐进地演进到其它高效的分布式工作流,还介绍了如何配合使用便利的PullRequest功能,体系地讲解了各种工作流的应用。行文中实践原则和操作示例...

    spring-cloud使用的各种示例

    - [springcloud(七):配置中心svn示例和refresh](http://www.ityouknow.com/springcloud/2017/05/23/springcloud-config-svn-refresh.html) - [springcloud(八):配置中心服务化和高可用]...

    SVN迁移到GIT.doc

    《从SVN迁移到Git的全面指南》 随着版本控制系统的发展,Git已经逐渐成为开发者社区的主流选择,而传统的...通过以上步骤,你可以顺利地将你的SVN项目过渡到Git,享受Git带来的高效协同和强大的版本控制功能。

    test-git-vs

    描述“测试git-vs”表明这可能是一个实验或教程,旨在对比Git的功能和用法与其他工具的差异,可能是为了评估它们在不同场景下的适用性或者性能。 标签“HTML”意味着这个项目可能涉及到Web开发,因为HTML(超文本...

    git常用操作命令

    与Subversion(SVN)等集中式版本控制系统不同,Git是分布式的,这意味着每个开发人员在其本地机器上都拥有完整的项目历史记录副本。 在开始使用Git之前,我们需要进行一些基本配置来个性化我们的Git环境: ```...

    git尚硅谷笔记.pdf

    #### 四、Git常用命令详解 1. **初始化仓库** - `git init`:在当前目录下初始化一个新的Git仓库。 - `git clone <repository>`:克隆一个已存在的仓库到本地。 2. **配置设置** - `git config --global user....

    Git Version Control Cookbook 2nd Ed-2018.7.pdf

    - **Git数据模型**:Git是一种分布式版本控制系统,它通过一种称为快照的方式存储数据,而不是记录文件之间的差异(如SVN)。这意味着每次提交时,Git都会创建一个文件的新快照。 - **版本库(Repository)**:版本...

    Git基本使用示例(git原理)

    ### Git基本使用示例(git原理) #### 一、Git简介 Git是一款开源的分布式版本控制系统,由Linux的创始人Linus Torvalds于2005年创建,并以GPL(General Public License)许可证发布。Git最初的设计目的是为了更加...

    git常用命令

    ### Git常用命令详解 #### 一、生成密钥对 - **命令**: `ssh-keygen -trsa -C "你的邮箱"` - **说明**: 此命令用于生成SSH密钥对,其中`-t rsa`指定了密钥类型为RSA,`-C "你的邮箱"`则是将你的邮箱地址作为注释...

    pro git 完整、完美中文版...

    - **概念**: 分支是Git中用于隔离开发工作的功能。 - **优势**: 支持非线性开发模式,便于实验新功能而不影响主分支。 **3.2 基本的分支与合并** - **创建分支**: `git branch <branchname>` - **切换分支**: `git...

    git基本原理与常用命令

    相比于传统的集中式版本控制系统(如SVN),Git提供了更好的灵活性和可靠性。 **分布式特性**:在Git中,每个开发者的工作副本实际上是一个完整的版本库的克隆,这意味着所有历史提交都在本地可用。这种设计让...

Global site tag (gtag.js) - Google Analytics