什么';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
myfeature
分支到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语句并最终发送