Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.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
什么';s传输GIT-SVN调试的最佳方式->;功能分支到主干?_Git_Git Svn - Fatal编程技术网

什么';s传输GIT-SVN调试的最佳方式->;功能分支到主干?

什么';s传输GIT-SVN调试的最佳方式->;功能分支到主干?,git,git-svn,Git,Git Svn,我有一个主干设置,所有的生产代码都放在那里 然后我有一个debug分支(父分支是trunk),我添加了调试代码,如日志记录、var转储等。。。这不应该在生产中。这个分支很少改变 最后,我有一个特性分支(父级是调试),在那里我利用调试的好处进行所有编码。存在对此分支的常量提交 我只想知道是否有更简单的方法将我的功能代码移动到主干。这就是我目前所做的: 将所有更改提交到我的功能分支 切换到master和git-svn-rebase与其他开发人员的更改 rebasemyfeature分支到master

我有一个主干设置,所有的生产代码都放在那里

然后我有一个
debug
分支(父分支是
trunk
),我添加了调试代码,如日志记录、var转储等。。。这不应该在生产中。这个分支很少改变

最后,我有一个
特性
分支(父级是
调试
),在那里我利用调试的好处进行所有编码。存在对此分支的常量提交

我只想知道是否有更简单的方法将我的
功能
代码移动到
主干
。这就是我目前所做的:

  • 将所有更改提交到我的
    功能
    分支
  • 切换到
    master
    git-svn-rebase
    与其他开发人员的更改
  • rebase
    my
    feature
    分支到
    master
    分支(
    git-rebase-到master debug feature
  • 合并
    功能到
    主功能
  • git svn dcommit
    对其他开发人员的更改
  • rebase
    debug
    master
    git-rebase master debug
  • 删除
    功能
    分支
  • debug
    分支创建一个新的
    功能

  • 对于我们所做的每个功能或bug修复,我们都有一个单独的分支。当它们经过充分测试后,就可以合并回主干

    如果分支变得有点旧,则可以对其进行更新

    我们倾向于将次要更改直接发布到主干中,但对于更重要的更改,我们将它们收集到一个发布候选分支中,并将包含更改的所有相关分支合并到该分支中,以便投入使用。在最终合并回主干并投入生产之前,可以对这个新分支进行部署和测试,以查看组合更改是否会破坏任何东西

    这种方法创建了许多分支,但由于我们将这些分支命名为与问题跟踪系统相关的分支,因此很容易跟踪它们。很容易包含或排除对发行版的任何更改


    希望对你有所帮助,我想你要找的是git cherry pick。这允许您在主机上应用来自特性的提交,而无需执行您描述的重基舞蹈


    因为您无论如何都要删除功能分支,所以我想您不需要看到显式合并。

    我认为您的工作流程非常优化。我认为樱桃采摘是一种过度杀戮(但这取决于提交的数量)。 您可以做的是将所有的提交压缩成一个,然后只对这一个进行cherry pick/rebase


    顺便说一句,如果你一直在做一些事情,为什么不写一个简单的脚本呢?Git是一个有点低级的工具,所以编写额外的脚本来帮助重复的任务是一个非常好的主意。

    好吧,我会说一个异端,每个人都会投我一票,但我们走吧。如果您直接使用svn,您的工作流程将简单得多

    使用它可以轻松地保持主干和调试分支的同步。要合并要素分支,您需要合并主干中要素分支的所有修改。这些命令类似于:

    要合并要调试的主干,请执行以下操作:

    cd debug_branch_workcopy
    svn merge --reintegrate http://server/project/trunk .
    svn commit
    
    要将要素分支合并到主干,请执行以下操作:

    svn log --stop-on-copy http://server/project/branches/feature123 #see the last revision listed
    cd trunk_workcopy
    svn merge -r{revision_above}:HEAD http://server/project/branches/feature123 .
    svn commit
    
    如果在合并后更改分支,则可以多次运行最后一个合并命令。Subversion将记住已经合并的修订,并且不会尝试执行两次。如果您在Windows中,免费的TortoiseSVN将为您提供一个很好的合并界面


    顺便说一句,我会尽量不要有一个单独的分支,只有调试功能。手动出错并将调试代码发送到生产主干太容易了。我会使用更具动态性的工具,在生产过程中不运行调试代码

    您的工作流程很复杂,因为您要做的事情很复杂。据我所知,没有一家风险投资公司可以让您轻松维护一些不应合并的更改。它充分说明了git的强大功能,即您的工作流程并不比现在更难


    我假设您的语言具有某种条件编译机制(
    #IFDEF
    预处理器指令等)。如果您将调试代码包装在这些代码中,您将体验到更少的摩擦。

    如果我理解正确,您希望调试功能只在(相当静态的)调试分支中,而不在主分支中。试试这个:

    将调试“假合并”到主程序中

    git checkout master
    git merge --no-commit debug
    git checkout master .        # undo all changes, get the files from master again
    git add .                    # stage all files
    git commit
    
    这样,调试将合并到主控中,但主控中的所有文件都不会更改

    现在,您只需在调试的基础上创建功能分支,并在完成后将它们合并到主功能中。Git现在知道调试功能已从master中剥离:

    git checkout debug
    git checkout -b new_feature  # create a new feature branch
    # hack, hack, hack
    git commit
    git checkout master          # All works fine...
    git merge new_feature        # ...so merge into master. Debug code will be stripped here
    
    您可以在新功能上快进调试分支,然后删除新功能分支


    请注意,无论何时更改调试分支,都必须重新执行伪合并过程。

    我的问题更具体,我希望您将其中的大部分合并到我当前的工作流程中,但为了简单起见,我描述了一个基本示例。是的,樱桃选择似乎需要大量工作。此外,当我对主干进行合并时,我会进行一次挤压,以便SVN将最终提交视为一次提交。我确实有一个bash脚本来完成这一切,只是不知道是否有更简单的方法,因为我在每一步都有“暂停”来检查是否出了问题,工作正常,只需一直观察它。@JD只需检查git返回值,如果有什么失败,只需运行bash即可。这将给你一个交互式的提示来修复东西,当你退出提示时,这个过程将继续。这是个不错的主意,我会尝试一下。也许我应该把它变成一个新问题,但将调试代码放在自己的分支中,而不是放在运行时可以打开/关闭的分支中,这真的是一个好做法吗?我个人不想冒着忘记在代码中添加#ifdebug语句并最终发送