2010-12-08 60 views
1

在我工作的公司中,我们制定了所有代码都应该在签入SVN存储库之前进行审核的政策。通常情况下,在我提交之前,我只是要求一个同事进行审查,但此时此刻几乎没有人会有几天的时间,而且我还有几个任务需要处理同一个班级。如何使用git-svn作为SVN存储库的中间审查工具?

我安装的git,并用混帐SVN,使本地存储库。我承诺在一段时间后我会提出的每一个改变,并且git-svn dcommit,我可以在主存储库中同步我的东西。

现在的问题是:如果我的同事将审查我的东西在几天之内有一个不同意提交会发生什么,或者要我做一些额外的改变(例如代码注释)?我该怎么做,而不必做额外的提交,最终会显示在我的SVN主存储库中?

例子,让我们说 - 对understandibility的缘故 - ,我在一个文件上工作。

  • SVN取出转1000
  • 添加的代码变化A,git的承诺。
  • 添加了代码更改B,git commit。
  • 添加代码更改C,git commit。

现在,我的同事接受修改A和C,但是变化率B不同意,并希望更多的意见去在沿有变化B.我想最终落得的结果是:

  • SVN修订版1001 - 代码改变阿
  • SVN修订版1002 - 修改后的代码变化B + addtitional评论
  • SVN修订版1003 - 代码改变C.

我一个我不是很熟悉git,并且对SVN非常熟悉。如何在不进行第四次提交的情况下将我承诺的贡献更改为代码更改B?

+2

“在我工作的公司,我们有检查在进入SVN仓库前的所有代码应该检讨政策”。你是认真的吗?这是我听说过的最荒唐的政策! – eckes 2010-12-08 21:24:28

回答

1

首先,您不需要附加的 VCS在您的公司进行trunk之前执行代码审查。 khmarbaise's answer是正确的。这样做的正确的(和理智的)方法是create a branch,使分支的更改,有你的同事签出分支的时候,你就大功告成了,检查代码,提交补救改变你的分支,然后谁就拥有权力意志将您的分支合并到trunk。这是基本的VCS协议。如果这不符合贵公司的做法,这肯定表明贵公司在VCS方面做得不对。

如果你是因为你的公司政策是空洞的,然后去解决你的问题

例中的以下部分绝对必须使用外部工具,让我们说 - 对 understandibility的缘故 - 我是在一个文件上工作 。

  • SVN取出转1000
  • 添加的代码变化A,git的承诺。
  • 添加了代码更改B,git commit。
  • 添加代码更改C,git commit。

现在,我的同事接受变化的 和C,但变化率B不同意, ,并希望更多的意见去沿着 变革B.我想要的结果,以 结束了,最终是:

  • SVN修订版1001 - 代码改变阿
  • SVN修订版1002 - 修改后的代码变化B + addtitional评论
  • SVN修订版1003 - 代码改变C.

我对git并不是很熟悉,而 对SVN相当熟悉。如何 更改,恕不制作 第四犯我犯 贡献到代码的变化率B?

我甚至不明白为什么你要避免第一次提交,如果你允许进行三次影响一个特性的提交。

如果你真的,真的是对这个整体思路正在经历意图,那么,你可以做,这样做,你将需要非常仔细地使用git rebase --interactive。这个强大的命令可以让你回顾你的提交并完全改变每个提交的改变。我必须强调,这有很大的潜在失去工作(或至少花费你大量的时间恢复),只有当你对git本身有非常坚定的知识时才应该这样做。

但你真的应该使用SVN分支与合并来完成这一切。

2

只需创建一个分支,做这个分支的提交。让您的同事迟到查看代码,然后将代码合并回主干(例如)或其他分支。

+1

你是指GIT分支还是SVN分支? SVN在处理未被查看的代码时不会被触及,所以SVN分支由于策略而不是选项。 – 2010-12-08 16:25:32

+0

@Pelle:他是一个SVN分支。你确定你不能在你公司的仓库中创建一个分支吗?这正是VCS的目的。将提交权限限制在`trunk`是非常合理的,但是完全不合理阻止,更不用说限制创建和委托给分支机构。 – gotgenes 2010-12-08 17:35:43

2

关键是不要将更改推入SVN,直到它们被批准。一旦你运行了git svn dcommit,你就失去了编辑和重新排序你的提交的权力。 dcommit公开你的修改,svn的历史(大部分)是不可变的。

我通常让我的一个分支的变化和他们推到一个公共的git仓库,其位置我给我的代码评审。然后,我可以继续在另一个分支中开展另一个项目。根据审查的反馈,我可以对工作仓库中的分支进行更改并重新发布以供审查,当一切准备就绪后,我会最终执行git svn dcommit来完成我对svn的更改。

+0

使用`git svn clone `检出SVN仓库中的代码,而不是`git svn init`。 '`应该和你使用`svn checkout `时使用的路径相同。 – gotgenes 2010-12-08 17:38:42

相关问题