使用源代码控制时的常见情况是具有开发分支以及版本化发布分支.我们使用CVS,HEAD作为开发分支,以及一个名为eg-release-6-2的分支,用于当前版本的产品.
新功能的开发仅限于开发分支,但有时必须在开发分支和当前版本分支中检查错误修复.这有时会非常繁琐,所以我正在寻找实现这一目标的实用方法.
当要提交的文件在两个分支上同步时,我特别希望快速"提交这些分支"解决方案.
(我们使用CVS作为我们的源代码控制系统,因此任何特定于CVS的答案都很好.但是,看看其他源代码控制系统是否可以提供更好的方法也很有趣.在客户端我们使用Eclipse,因此Eclipse解决方案是好的.但是如果你有一个非Eclipse解决方案,那也没关系.)
鉴于Subversion基本上是为了替换CVS而编写的,目前还有任何令人信服的理由继续使用CVS进行版本控制吗?
这里真的很容易.最好的理由获得胜利.
我是你所听说过的一所学校的计算机科学专业的学生,现在已经编程好几年了(大约8年),所以我写了几行代码.但是因为我从来没有真正分发过 - 源代码或二进制文件 - 也没有团队开发(虽然我确信我会这样做!),但我从来不需要学习源代码管理系统.我有一个非常无聊的文件夹层次结构src/project_name或者src/class_code/hw_or_project_name如果我需要将代码发送给朋友或进行评分,它只是一个tarball.
随着我的项目变得越来越大,近年来发生了一些变化.我的Mac,使用Time Machine,现在可以进行每小时备份 - 这几次为我节省了一些时间,最近我通过SSH进行了重大更改...然后几小时后在我的编辑器中保存并关闭了陈旧的副本.
但是,出于某种专业兴趣 - 以及它可能有用的压倒性感觉 - 我决定学习SCMS.现在,我有很多的经验,作为一个源代码"消费者" - ,git clone,svn checkout,,cvs co诸如此类的事情-但没有作为维护者,提交者,或更新.
我的问题是:我应该学什么?现在,你们中间有一群人在尖叫着"为什么一个人?你会用很多!" 但我想学习SCM的基础知识,并在最直接的系统中养成实际使用它的习惯.在我真正需要它之前,我有很多内容要做的概念 - 分支,标签,合并,协作等.
要清楚,我不是Linus Torvalds.我将维护一个,或者几个分支.在我的几十个文件中,我不介意某些操作在一个系统上比在其他系统上多花几百毫秒.
现在我有什么?我有一个虚拟主机.他们提供Subversion托管点击,或者我可以存储其他存储库没有问题.由于我无法解释的原因,我更倾向于Subversion.但这正是我不愿意跳进去的原因.我知道Mercurial,Git等等是热门的新事物,正在分发,但我不确定为什么这是一个好处.事实上,我不太确定它是如何起作用的.
那么,我该怎么做呢?颠覆还是Git?Mercurial还是CVS?Visual Source Safe还是Perforce?(最后一对是一个笑话)为什么一个在另一个?
谢谢你的时间,如果在错误的部分,我道歉.
编辑谢谢大家!感谢您的评论.考虑到Git和Hg之间的选择,我可能会选择Git - 任何分歧?二,为什么不 Subversion?它似乎是旧的或其他过时的共识(不仅仅是在这里).为什么?
编辑2所以在阅读了所有的回复并做了一些阅读之后,我决定和Git一起去.如上所述,"答案"是最好的理由.Git似乎比Mercurial更受欢迎,即使它不那么干净.我正在将更改推送到我的网络服务器,我有viewgit已安装,而且工作得很好.在我的网络服务器上存储副本的动力是我想从我的几台机器上工作,我希望它们不同步.我还希望有几个工作副本彼此不同步和我的服务器,我现在明白Subversion在这方面相当薄弱.有很多我还在努力解决,但我现在已经设置好了,这样我就可以从http中拉出/克隆并推送ssh(下一步是设置Gitosis).对于想要做我正在做的事情的新手 - 你会发现你的"推送"命令将在第一次工作,但任何"克隆"的副本都不会跟踪你所做的改变.Git认为这是一个安全功能......我只是略微理解为什么,但它与合并有关.诀窍是使用它 服务器上的更新后挂钩,用于将新推送的副本合并到服务器的工作副本中.
我有一个autotools项目:automake,autoconf.
我想禁止make从改造的文件configure,Makefile.in等等; 只是为了编译工作.
有些文件是手工编辑的,我知道我不应该这样做.(或者项目已从CVS更新,所有生成的文件都存储在CVS中).但目前我没有安装正确版本的autotools.
必须修改此文件的时间(必须更新/更旧):
aclocal.m4
configure.in
confdb/ax_prefix_config_h.m4
Makefile.am
Makefile.in
Makefile
configure
config.status
Run Code Online (Sandbox Code Playgroud)
或者:touch我必须执行哪些命令才能实现目标?
每当我尝试在项目中添加目录时,使用终端(在Mac OSX 10.8.x上)
project_root jacob$ cvs add foo/
project_root jacob$ cvs add ./shared/foo/
project_root jacob$ cvs add /full/path/foo/
Run Code Online (Sandbox Code Playgroud)
CVS抱怨:
cvs add: in directory `.':
cvs [add aborted]: there is no version here; do `cvs checkout' first
Run Code Online (Sandbox Code Playgroud)
另外,我听说cvs不喜欢创建空目录,并且它不喜欢创建一个只包含目录的目录(没有直接的孩子是文件),因此内部foo/只是一个名为的空文件blank.txt.
跑步cvs checkout project没有用.
这个消息很荒谬; 显然没有版本 - 这就是为什么它被称为add!
PS令人遗憾的是,升级到svn/Git目前还不是一种选择.
CVS真的让我抓狂!
有没有删除粘性标签而不更新文件内容的技巧?我知道'cvs up -A'但这也改变了我的文件.
或者反过来说:有没有办法在不首先设置粘性标签的情况下将完整目录更新为上一个日期?
背景:我使用的是CVS和HG版本的工作副本,我搞砸了,所以我不想回到它同步的最新点,然后检查CVS会发生什么.
感谢致敬.
我对cvs有疑问.当我使用Tortoise CVS的添加功能向CVS添加两个文件时.出现以下错误消息:
cvs add: ' **.cpp' added independently by second party.
Run Code Online (Sandbox Code Playgroud)
有没有优雅的方法来解决这个问题?谢谢.
这似乎应该是这么简单,但我找不到任何似乎有效的解决方案......
我需要一个CVS命令,它给出了您已应用于文件的标记的名称,它将为您提供修订号.
CVS树结构:
(filename)
|
+--> 1.1-----(branch)
| |
| 1.1.1.1---(tag1)
| |
| 1.1.1.2---(tag2)
| |
| 1.1.1.3---(tag3)
| |
| :
1.2
|
|
:
Run Code Online (Sandbox Code Playgroud)
我能找到的最接近的是使用log带有-Q标志的命令,但这仍然提供了比我需要的更多的信息.
例如: cvs -Q log -h filename
将标记名传递给log命令似乎没有任何效果.
CVS版本信息:

我目前的解决方案是使用perl脚本来解析log命令的输出,但必须有一个更简单的方法...
我正在尝试将我的更改提交到Eclipse Kepler中的存储库服务器(使用CVS),但是当我这样做时,我得到以下错误,这是我以前从未见过的:
服务器在执行"cvs commit"命令时报告错误.ProsperityMobile:cvsntsrv服务器:粘贴标签
1.6' for filesrc/com /繁荣/移动/控制器/ UserController.java'不是分支机构ProsperityMobile:cvsntsrv服务器:粘贴标签1.14' for filesrc/com/prosperity/mobile/service/UserService.java'不是分支机构ProsperityMobile:cvsntsrv [服务器中止]:首先纠正上述错误!
说实话,我甚至不知道从哪里开始解决这个或者它甚至意味着什么.正确方向的任何一点都会非常感激!
我正在使用在org-netbeans-lib-cvsclient.jar与CVS通信的java类中执行各种cvs命令.我能够执行cvs checkout命令,添加,提交等.
但是,我需要找出哪个命令等同于cvs ls -R命令.
这是我编写的代码,允许执行cvs检查:
CheckoutCommand command = new CheckoutCommand();
command.setBuilder(null);
command.setRecursive(true);
command.setModule(module);
if(revision!=null)
{
command.setCheckoutByRevision(revision);
}
command.setPruneDirectories(true);
command.setUseHeadIfNotFound(true);
executeCommand(command, AnonymizerConstants.DEFAULT_LOCAL_PATH);
Run Code Online (Sandbox Code Playgroud)
我需要为CVS ls -R或CVS rls做类似的事情