我需要在我的grails web app中为文章实现修订系统.在搜索grails论坛,stackoverflow,grails插件和谷歌搜索互联网后,我最终得到了3个选项:
选项1 - 使用grails Envers插件(请参阅http://code.google.com/p/grails-envers-plugin/).有没有人成功使用它?或者在没有插件的情况下使用Envers(请参阅此处),但如何使其与GORM一起使用?
选项2 - 使用Gvers插件我在这里找到:https://github.com/ziftytodd/gvers.我从来没有听过有人使用它,所以有没有人曾经成功使用它?
选项3 - 内置机制.Weceem为Weceem CMS的任何内容创建了版本控制系统.我可以从代码的逻辑和这个伟大的应用程序的设计中汲取灵感,但它似乎有点矫枉过正,我不喜欢使用非标准的解决方案.
所以我的问题是,你建议我做什么?你有没有使用过这些选项?
非常感谢您的见解.
我想显示应用程序在about框中构建的时间戳.这将允许我跟踪应用程序的不同版本.如何在Java中检索此信息?
我有一个Java类存储在HttpSession对象中,该对象在集群环境中的服务器之间进行序列化和传输.出于此解释的目的,我们将此类称为"Person".
在改进代码的过程中,这个类从"com.acme.Person"转移到"com.acme.entity.Person".在内部,类保持完全相同(相同的字段,相同的方法,相同的一切).
问题是我们有两组服务器同时运行旧代码和新代码.具有旧代码的服务器具有序列化的HttpSession对象,并且当新代码反序列化它时,它会抛出ClassNotFoundException,因为它找不到对com.acme.Person的旧引用.此时,处理这个很容易,因为我们可以使用新包重新创建对象.然后问题变成新服务器中的HttpSession将使用对com.acme.entity.Person的新引用来序列化对象,并且当在运行旧代码的服务器中对其进行反序列化时,将抛出另一个异常.此时,我们再也无法处理此异常.
对于这类案件,最好的策略是什么?有没有办法告诉新服务器通过引用旧包序列化对象并将旧包的引用反序列化为新包?所有服务器运行新代码后,我们将如何过渡到使用新包并忘记旧包?
我经常需要分叉一个使用Maven的Java项目(通常在github上).
当我分叉项目并进行更改时,我通常希望将一个版本剪切到我自己的私有(但在互联网上)maven存储库.
因此,我的自定义版本应该是什么版本标签的问题.我不能这样做,SNAPSHOT因为我需要它才能成为一个版本.有时我用项目后缀.ADAMGENT(因为我是一个自恋者).让我说我叉1.0.4-SNAPSHOT.我可以改成它1.0.4.ADAMGENT.我不知道这是不是一个好主意.在某些情况下,我甚至不能使用.ADAMGENTSpring的Gradle构建工具不喜欢它.所以对于我做的Spring项目.ADAMGENT.RELEASE或者.ADAMGENT.M1它是一个里程碑.
其他人做什么?
更新: 虽然我说fork我更多的补丁程度更改.另一方面,赏金(由不同的用户)可能是用于分叉和/或补丁
背景:
有很多关于Web服务版本化的信息,我们的决定是使用以下方法来版本化我们的Web服务:
但是,现在我们正在决定如何实际实现这一点,而在这里我们还没有找到关于最佳实践的大量信息.我们使用(Java):
因此,为了保持Web服务的旧版本,我们需要保留旧版本的代码.为此,我们基本上看了两种不同的方法:
1)对于每个新版本,请制作相关代码的完整新副本
这种方法看起来像这样:
com.company.webservice.v3. -all of the web service classes, POJO’s and converters go here
com.company.webservice.v4. -all of the web service classes, POJO’s and converters go here
Run Code Online (Sandbox Code Playgroud)
所以,这里我们有重复的代码.我们的想法简而言之:
2)使用spring仅制作受更改影响的每个类的副本
这种方法意味着使用Spring IoC并让所有版本的Web服务尽可能使用相同的代码.只有当我们进行影响行为/ api的更改时,我们才会创建这些类的新版本.例如:
com.company.webservice.beans.MyXMLAnnotatedPOJOv3.java
com.company.webservice.beans.MyXMLAnnotatedPOJOv4.java
com.company.webservice.translators.MyXTranslatorv1.java
com.company.webservice.translators.MyXTranslatorv2.java
Run Code Online (Sandbox Code Playgroud)
这两种方法都不是最佳方法,但我们没有找到关于此的更多信息.所以,我的问题是: 你会使用哪两种方法?或者你会采取完全不同的方法?
我已经尝试使用agvtool进行ios构建版本化.当目录中只有一个.xcodeproj文件时,它很有用.在我的例子中,我们的项目结构是在一个目录中有4个.xcodeproj文件.当在此目录中触发agvtool命令时,它会抛出错误消息,'agvtool不能与同一目录中的多个项目一起使用'.任何人都知道如何使用这个文件夹结构使agvtool工作?
我正在编译Linux库(对于Android,使用NDK的g ++,但我敢打赌我的问题对任何Linux系统都有意义).在将这些库提供给合作伙伴时,我需要使用版本号标记它们.我还必须能够以编程方式访问版本号(例如,在"关于"对话框或GetVersion函数中显示它).
我首先使用unversioned标志(版本0.0)编译库,并且在我将测试发送给合作伙伴之前完成测试时需要将此版本更改为真实版本.我知道修改源代码并重新编译会更容易,但我们不想这样做(因为如果我们重新编译代码,我们应该再次测试所有内容,我们觉得它不会出错,请看这个注释post和最后因为我们的开发环境以这种方式工作:我们为Windows二进制文件执行此过程:我们设置0.0资源版本字符串(.rc),然后我们使用verpatch更改它...我们想要使用相同的类型运送Linux二进制文件时的进程).
这里最好的策略是什么?总而言之,要求是:
0.0或其他任何东西)编译二进制文件如果您的答案是"重命名.so",那么请提供3的解决方案:如何在运行时检索版本名称(即:文件名).
我在考虑一些解决方案,但不知道它们是否可以工作以及如何实现它们.
string或三个int),并有办法在以后的二进制文件中更改它?使用二进制sed ......?请注意,我们使用QtCreator来编译Android .so文件,但它们可能不依赖于Qt.因此使用Qt资源并不是一个理想的解决方案.
我了解Microsoft在对其产品进行版本控制时使用此模板:Major.Minor.Build.Revision.
当"开发人员"想要表明软件发生重大变化并且无法假设向后兼容性时,Major会发生变化.也许完成了对代码的重写.
为了向后兼容,次要编号代表了显着的增强.
构建号是一个小变化,例如重新编译相同的源.
修订版用于修复安全漏洞,应完全可互换.Build和Revision都是可选的.此信息基于MSDN版本类.
你如何对你的项目进行版本设置,为什么要用这种方式对它们进
我想删除项目存储库的一些远程分支.我运行下一个命令:
git push origin :name_of_branch
Run Code Online (Sandbox Code Playgroud)
当我列出远程分支时
git branch -r
Run Code Online (Sandbox Code Playgroud)
我删除的分支没有出现,但是我的合作伙伴
git fetch
Run Code Online (Sandbox Code Playgroud)
然后
git branch -r
Run Code Online (Sandbox Code Playgroud)
在列表中,name_of_branch我删除的分支仍在列表中.但是,当他试图删除分支时
git push origin :name_of_branch
Run Code Online (Sandbox Code Playgroud)
他收到了下一条消息:
error: unable to delete 'name_of_branch': remote ref does not exist
error: failed to push some refs to 'the_name_of_the_repository'
Run Code Online (Sandbox Code Playgroud)
我怎么能完全删除列表中的分支?
我使用以下命令来应用补丁Mercurial,而不提交它:
hg import patch.diff --no-commit
Run Code Online (Sandbox Code Playgroud)
它工作得很好,但是如果我尝试一次应用几个补丁:
hg import patch1.diff --no-commit
hg import patch2.diff --no-commit
...
Run Code Online (Sandbox Code Playgroud)
我在第二次提交后收到此错误消息:
abort: uncommitted changes
Run Code Online (Sandbox Code Playgroud)
如果我完全相同SourceTree(应用patch1然后patch2并选择"修改工作副本文件")它可以工作:两个补丁应用于工作副本,patch1和patch2的变化组合/折叠在一起.
如何使用hg命令行执行相同的操作?