Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Svn 在Subversion中与团队成员进行高效的微观合作?_Svn - Fatal编程技术网

Svn 在Subversion中与团队成员进行高效的微观合作?

Svn 在Subversion中与团队成员进行高效的微观合作?,svn,Svn,有时我在开发一个功能时遇到了一个奇怪的崩溃或者其他我无法立即解决的问题。然后我想把我当前的源代码给我旁边的人,这样他也可以尝试解决它 好像我有3个坏的选项和0个好的选项 将它提交到trunk,这样他就可以获取我的更改不代码尚未完成 创建一个工作分支并在那里提交。当我只开发一个小功能时,不值得这么麻烦 执行svn diff,通过ssh向他发送补丁并让他应用。还是不值得这么麻烦 在Subversion中处理此问题的标准方法是什么? 另外:像git这样的DVCS工具能比Subversion更好地处

有时我在开发一个功能时遇到了一个奇怪的崩溃或者其他我无法立即解决的问题。然后我想把我当前的源代码给我旁边的人,这样他也可以尝试解决它

好像我有3个坏的选项和0个好的选项

  • 将它提交到trunk,这样他就可以获取我的更改<斯特朗>不代码尚未完成
  • 创建一个工作分支并在那里提交。当我只开发一个小功能时,不值得这么麻烦
  • 执行
    svn diff
    ,通过ssh向他发送补丁并让他应用。还是不值得这么麻烦
在Subversion中处理此问题的标准方法是什么?


另外:像git这样的DVCS工具能比Subversion更好地处理这种看似简单的情况吗?

我过去曾使用发送补丁的方法来处理这种情况。但是,以后很难协调这些更改


我现在使用Git,它肯定会对这种情况有所帮助,这是一件非常自然的事情。我可以让cow工作人员从我的存储库中提取特定的提交,并帮助处理这些提交。我们每个人都可以进行提交,然后我可以从他们的存储库中提取提交,使用git-rebase-I组织一切,然后从那里开始。

我通常会通过电子邮件(或其他方式)将有问题的代码发送给我的同事,前提是他/她在该单元(或那些单元)中没有更改这不能暂时搁置。然后,他/她将我的更改复制到适当的位置并开始工作。不多也不少。稍后,当他们做一个diff时,他们会在diff中看到我的更改,从存储库中更新以覆盖他们帮助编写的代码,瞧。一切恢复正常。

subversion的问题(我作为它的日常用户这么说)是它没有促进尽早和经常检查源代码管理的想法。由于分支机构集中,通常在代码“准备就绪”(空中引号)之前没有人签入。以前在与小团队合作时,我在Subversion中创建了每个用户的分支。因此,您的回购协议可能会分解如下

/
`---> trunk/
`---> branches/
`---> users/
            `---> john/
                      `---> trunk/
                      `---> branches/
            `---> mary/
                      `---> trunk/
                      `---> branches/

subversion可能会开始变得有点混乱,我不确定它在大型团队中有多有效。SVNmerge可以帮助解决一些问题,但它可能是您的一种可能解决方案。git(一般来说,大多数DCV)可以消除这些问题,这也是它们流行的原因之一。

如果另一个人真的坐在你旁边,我可以建议结对编程吗?他们可以来到你的电脑前,你可以一起工作。它可以非常有效,当你遇到困难时,你不必孤立地工作

这就是说,即使使用结对编程,有时您也必须将代码发送给其他尚未准备就绪的人。除了所涉及的类型之外,在subversion中创建一个短期分支并不需要太多,一些小脚本将为您自动化许多过程

这里有两个适合我的脚本。它们采用如下存储库结构:

project/trunk/
       /branches/some_branch
                /another_branch
与另一个结构协同工作需要进行一些调整

# script 1: svn_wc2b (working copy to branch)
trunk_url=`svn info | grep URL | sed 's/URL: //'`
project_base=`svn info | grep URL | sed 's/URL: //;s/\/trunk.*//'`
branch_name=my_working_copy

svn cp $trunk_url $project_base/branches/$branch_name -m "Creating temporary branch for working copy."
svn switch $project_base/branches/$branch_name
然后,如果要共享trunk的工作副本,请键入:

svn_wc2b  # creates branch, switches to it    
svn commit # commit your in-progress work to the branch
要获取您的代码,其他开发人员只需键入:

svn switch http://repository/project/branches/my_working_copy
当其他开发人员完成并提交了更改时,请使用如下脚本:

# script 2: svn_b2wc (branch to working copy)
branch_revision=`svn log -q --stop-on-copy | grep '^r[0-9]' | sed 's/^r//;s/ |.*//' | tail -n 1`

if [ -e $branch_revision ] && [ -e $1 ]
then
  echo "Couldn't get branch creation revision number. Check svn log --stop-on-copy and use svn_b2wc <revision_number>"
  exit
elif [ -e $branch_revision ]
then
  branch_revision=$1
fi

branch_url=`svn info | grep URL | sed 's/URL: //'`
project_base=`svn info | grep URL | sed 's/URL: //;s/\/branches.*//'`
branch_name=my_working_copy

svn switch $project_base/trunk
svn merge -r $branch_revision:HEAD $branch_url .
svn delete $branch_url -m "Deleting working copy branch."
分支中更改的代码现在返回到主干的工作副本中,您可以继续工作,直到准备提交为止。仅仅共享一些代码似乎很难,但如果您花费一些时间使用脚本自动化您的流程,那么每次需要使用它时只需要几秒钟

svn_b2wc # switch back to trunk, merge branch changes, delete branch