当前位置: 代码迷 >> CVS/SVN >> git-svn 惯用功能示例
  详细解决方案

git-svn 惯用功能示例

热度:9720   发布时间:2013-02-26 00:00:00.0
git-svn 常用功能示例

git-svn 常用功能示例

?

版本的要求

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

svn 仓库

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

https://virtual.googlecode.com/svn

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

建立工作目录

1$ mkdir /tmp/virtual && cd /tmp/virtual2$ git-svn init https://virtual.googlecode.com/svn/trunk . --username=zhang3$ git-svn fetch4$ ls -F debian/  HOME/  README  TODO

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

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

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

1$ echo "有一天我梦到自己在考试" >> README2$ echo "醒来的时候我果然在考试" >> TODO3$ git-commit -a -m "小笑话"Created commit 8fb8ee7: 小笑话 2 files changed, 2 insertions(+), 0 deletions(-) 4$ git-svn rebase5$ git-svn dcommitCommitting to https://virtual.googlecode.com/svn/trunk ...    M   README    M   TODOCommitted r10    M   TODO     M   READMEr10 = 7123a9eb252c31a2fcbd1c2908642fa6794fe687 (git-svn)No changes between current HEAD and refs/remotes/git-svnResetting 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 ReleasedApplying 发布一个新版本error: patch failed: debian/changelog:1 error: debian/changelog: patch does not applyUsing index info to reconstruct a base tree...Falling back to patching base and 3-way merge...Auto-merged debian/changelogCONFLICT (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: 14$ vi debian/changelog   ...5$ git-commit -a -m "冲突解决后发布的最新版本" Created commit b899d8b: 冲突解决后发布的最新版本 1 files changed, 2 insertions(+), 1 deletions(-)6$ rm -rf .dotest7$ git-svn rebaseCurrent branch HEAD is up to date.8$ git-svn dcommitCommitting to https://virtual.googlecode.com/svn/trunk ...     M   debian/changelogCommitted r12    M   debian/changelogr12 = cc5b21aaf77a2952b4a3fa74a80cbdd826f28d92 (git-svn)No changes between current HEAD and refs/remotes/git-svnResetting 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 foo2$ git-add foo3$ git-commit -a -m "New flie"4$ git-commit --amend5$ git-rebaseCurrent branch HEAD is up to date.6$ git-svn dcommitCommitting to https://virtual.googlecode.com/svn/trunk ...     A   fooCommitted r13    A   foor13 = 9f9db8db023de576f8ac63c993619218febbb74d (git-svn)No changes between current HEAD and refs/remotes/git-svnResetting to the latest refs/remotes/git-svn7$ mkdir /tmp/test && cd /tmp/test 8$ svn co https://virtual.googlecode.com/svn/trunk . --username=zhang9$ 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 lineNew 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)。

  相关解决方案