如何获取特定用户对存储库的提交历史记录?
我可以通过命令行或TortioseCVS访问CVS,因此使用任一方法的解决方案就足够了.
我们有几个产品有很多共享代码,必须保留几个版本.
为了解决这个问题,我们使用了很多Eclipse项目,其中一些包含库jar,还有一些包含共享源代码(在几个项目中,为了避免获得具有大量依赖关系的巨大堆,同时能够从头开始编译所有内容以确保源和二进制文件是一致).我们使用projectSet.psf管理那些,因为这些可以直接从CVS中拉出所有项目并留下完全准备好的工作区.我们不直接进行ant构建或使用maven.
我们现在希望能够将所有这些项目及其各种版本放在一个连续集成工具中 - 我喜欢Hudson但这只是一个品味问题 - 这实际上意味着我们需要一种自动方式来检查项目到一个新的工作区,并按照每个项目中的项目文件中的描述编译源文件夹.Hudson没有提供这样的方法来构建项目,所以我一直在考虑采用这种方法的最佳方法.
想法已经存在
我真的很想听听别人的经历,所以我可以决定如何解决这个问题.
编辑:另一个选项可能是使用CI,它更了解Eclipse项目和/或项目集.我们没有宗教信仰 - 这只是让自己无需自己动手就可以运行的问题.巡航控制可能是一个更好的选择吗?其他?
编辑:发现ant4eclipse有一个"团队项目集"工具. http://ant4eclipse.sourceforge.net/
编辑:使用ant4eclipse和ant-contrib ant扩展来构建一个完整的工作空间,作为一个类似于Eclipse 3.5M6中的Runnable Jar工具的sjgned runnable jar文件.我仍然依赖于Eclipse来创建初始的空工作空间,并提取ProjectSet,这是下一个障碍.
编辑:使用双配置结束,即Hudson从CVS中提取与ProjectSet.pdf文件中列出的相同的模块集(需要具有相同的标记),使它们彼此相邻.然后ant4eclipse与嵌入在主模块中的projectSet.psf文件很好地配合.警告:Hudson中的模块列表必须手动更新,之后需要手动工作区清理才能让Hudson"发现"现在有比以前更多的项目.这对我们来说已经好几个月了,但是让一切都在ant文件中运行是相当繁琐的.
编辑:使用ant4eclipse的"使用团队项目"和项目面板中的Ctrl-A,Ctrl-C和Hudson的CVS项目中的Ctrl-V已经证明可以很好地适应我们(对于成熟的项目很少改变).我正在等待ant4eclipse 1.0的发布 - http://www.ant4eclipse.org/,目前在里程碑2中 - 看看有多少本土功能可以被ant4eclipse的东西取代.
编辑:ant4eclipse是在M4的20100609,因此http://www.ant4eclipse.org/node?page=1的时间表有些滑落.
编辑:使用我们的ant4eclipse方法更长时间后的结论是构建脚本变得非常粗糙并且难以维护.团队ProjectSet工具(ant4eclipse用于定位项目)适用于基于CVS的存储库,但不是在我们迁移到git之后(这本身就是一件大事).新项目很可能基于maven,因为这在Jenkins中有很好的支持.
对于我正在使用CVS实现二分法的脚本,我想弄清楚当前结账的"时间戳"是什么.换句话说,如果我在分支/标签上,我想知道最后一个时间戳被提交到该分支/标签.如果我在头上,我想知道头上的最后一个时间戳.
我知道这不是100%保证,因为cvs checkout可以在不同的时间戳/修订/ ...有不同的文件,但是大多数情况下正确的解决方案对我来说都很好.
天真的,我想到了
cvs log -N | grep ^date: | sort | tail -n 1 | cut -d\; -f1
Run Code Online (Sandbox Code Playgroud)
将要做到这一点,但事实证明它贯穿整个提交历史,对于所有分支/标签.
我正在尝试提交一个文件已经"cvs remove"d的项目,但实际上需要在那里.内容已完全重写,但需要保留相同的名称.
我无法提交项目或重新添加文件而不会收到这个恼人的错误消息.如何在CVS中"取消删除"文件?
我有一个情况,我有一个老年人的CVS存储库,我们希望一次性转换为git,同时保持完整的历史记录等.
存储库根目录下的所有文件夹都包含Eclipse项目(普通或动态Web项目),包括.classpath和.project.我们使用Team ProjectSet来检查给定任务所需的项目(项目集位于包含main的项目中,其余是库项目).
签出Team ProjectSet后,工作区将完全填充.
多年来这种方法运作良好(除了3.5附带的项目设置部分),如果可能的话,我们希望以类似的方式使用git,但我们不确定如何.
我玩过一段时间git cvs import但失败了 - 可能是因为我们没有使用模块.
您如何建议我们这样做,以及我们应该如何使用git来允许我们当前使用共享库项目?我们将HAVE介绍Maven和创造我们的图书馆项目的Maven模块?或者只是蚂蚁常春藤?
编辑:我现在设法通过合适的cvs2svn调用将我们的CVS存储库转换为Subversion,并发现Eclipse很好地识别了生成的Subversion存储库.不幸的是在克隆http: //github.com/iteman/svn2git`并尝试运行bin/svn2git之后我得到了
tra@Sandbox:~/cvsgit/svn2git/svn2git$ bin/svn2git
bin/svn2git:35:in `initialize': wrong number of arguments (2 for 1) (ArgumentError)
from bin/svn2git:35:in `new'
from bin/svn2git:35
Run Code Online (Sandbox Code Playgroud)
这是与Ubuntu 10.04.1 LTS服务器,我尝试了各种sudo与Ruby及其宝石的东西,但没有完全理解我做了什么,因为我不是一个Ruby程序员,所以我可能搞砸了一些东西.我很感激建议 - 如果最简单的是安装另一个Linux变种来进行转换,那很好.
编辑:
https://help.ubuntu.com/community/Git http://css.dzone.com/articles/subversion-git-morning
编辑:我第一次尝试使用默认的svn2git成功完成(一段时间后),我得到一个很好的存储库,其中git branch -a大致报告
tra@Sandbox:~/gitroot/svnroot$ git branch -a
* master
remotes/XX64_DEPLOYED_CODE
remotes/Beta1
remotes/Beta2
remotes/SV46
... lots more
Run Code Online (Sandbox Code Playgroud)
我们有兴趣能够检查SV46分支并使用它(我们基本上不关心标签,只关心实际的分支).我已经设置了gitosis并将此存储库推送到gitosis,并将其克隆到另一台计算机,以了解如何使用Eclipse进行"使用SV46"位. THAT库不知道所有的分支:
tra@TRA ~/git/git00 (master)
$ git branch -a
* master
remotes/origin/HEAD -> origin/master
remotes/origin/master
Run Code Online (Sandbox Code Playgroud)
我是否需要按照svn2git的原始结果来获取gitosis存储库中的信息?我需要用参数克隆吗?我应该使用建议的版本而不是Ubuntu附带的版本重做svn2git步骤吗?
编辑:事实证明,使用"git …
我正在尝试将CVS存储库转换为mercurial但无法使其工作.
我从一个干净的结账开始:
cvs -d :sspi;username=xxx;hostname=yyy.local:/cvsrepos checkout repo
Run Code Online (Sandbox Code Playgroud)
哪个工作正常
然后我做:
hg convert .
Run Code Online (Sandbox Code Playgroud)
但它失败了:
assuming destination .-hg
initializing destination .-hg repository
connecting to :sspi;username=xxx;hostname=yyy.local:/cvsrepos
abort: unexpected response from CVS server (expected "Valid-requests", but got 'E cvs [server aborted]: Root :sspi;username=xxx;hostname=yyy.local:/cvsrepos must be an absolute pathname\n')
Run Code Online (Sandbox Code Playgroud)
我在Windows 7上运行cvsnt
编辑:
调查此更多,似乎mercurial启动本地服务器cvs server,然后与该实例而不是远程服务器进行通信.
我基于以下观察:
C:\cvstest\:sspi;username=xxx;hostname=yyy.local:\cvsrepos当然失败的文件
.是不是hg不理解sspi连接字符串?
编辑2:
不是解决方案,但我找到了一种解决方法:将完整的远程存储库复制到我的机器上,并且:
cvs -d :local:\localcopyofrepo checkout repo
hg convert repo
Run Code Online (Sandbox Code Playgroud)
一切都很好
我刚刚发现了一个仍然使用CVS的开源项目.我想知道现在还有什么理由比CVN或Git更喜欢CVS.(我不认为懒得迁移作为答案!;-))
CVS有其他两个缺乏的东西吗?比如说,支持$ OS或$ fancy_tool?
在" 使用SVN而不是CVS有什么好处?"有详细解释为什么不使用CVS.但我想反过来问问.CVS不可能都是坏事.或者是吗?
我需要从命令行以二进制模式提交jar文件.
我应该使用什么命令?以下不起作用:
$ cvs commit -kb -m "Committing v2.5.7" myJar.jar
Usage: cvs commit [-Rlf] [-m msg | -F logfile] [-r rev] files...
-R Process directories recursively.
-l Local directory only (not recursive).
-f Force the file to be committed; disables recursion.
-F logfile Read the log message from file.
-m msg Log message.
-r rev Commit to this branch or trunk revision.
Run Code Online (Sandbox Code Playgroud) 我正在使用cvs2svn-2.4.0进行CVS到Git的迁移.这不包括.cvsignore到.gitignore转换.我怎么能把.cvsignore文件转换成.gitignore文件?
cvs ×10
eclipse ×3
git ×3
java ×2
svn ×2
binaryfiles ×1
cvs2git ×1
hudson ×1
ignore ×1
mercurial ×1
subclipse ×1
subversive ×1
tortoisecvs ×1