我们有一个我们想要版本控制的PHP项目.现在,我们有三个人正在研究项目的开发版本,该版本驻留在我们所有Eclipse IDE都链接到的外部文件夹中,因此没有版本控制.
什么是正确的方法和版本控制的最佳方式?
我们有一个SVN设置,但我们只需要找到一个检查进出的好方法,这样我们就可以在开发服务器上进行测试.有任何想法吗?
由于遗留原因,我在项目中使用CVS.最近我做了一些改变,破坏了我们的代码,我需要将它们还原.什么是CVS的模拟git revert -r <old_revision>?
查看过去的问题,例如如何还原大变更,CVS提交不会对已更改的文件进行分组.是使用日期还原的唯一方法吗?
此外,查看过去更改的最佳方式是什么?CVS日志输出太多信息,其中大部分都是不必要的.我想看到提交消息和更改的文件.
是否存在用于编程语言的差异/合并工具,它以语法识别的方式工作(如XML Diff Tool),不仅仅是逐行比较(并且可选地忽略空格).
我对实际遵循语言语法和分隔符的程序感兴趣,建议在不破坏语法正确性的情况下进行更改,或者在多行中分隔语句.示例行为是:
*找到一个if(){引入额外嵌套级别的自动捆绑闭合支撑}下面的几行.)
*保持匹配语法元素在一起,避免像删除块往往创建的愚蠢:
int function_A()
{
int ret;
ret = something;
ret += something_else;
Run Code Online (Sandbox Code Playgroud)
return ret;
}
int function_B()
{
if(valid)
{
int ret;
ret = something;
ret += something_else;
Run Code Online (Sandbox Code Playgroud)
return ret;
}
Run Code Online (Sandbox Code Playgroud)
else return -1;
}
Run Code Online (Sandbox Code Playgroud)
就个人而言,我很想找到能够处理C++语法的软件,但了解其他语言的解决方案也会很有趣.
我的一位同事完全搞砸了我们主CVS存储库中目录的内容.我需要将整个模块恢复到去年年底的状态.请问CVS命令是什么?
他添加并删除了数百个文件,因此简单的"复制旧签出和提交文件"是不够的.
我有RTFM和STFW,我试过这个:
cvs co modulename # Note no -P option
cvs up -jHEAD -jMAIN:2008-12-30 modulename
Run Code Online (Sandbox Code Playgroud)
但这不起作用 - 他创建的新文件被删除,但旧的文件和目录不会被复活.(我没有承诺).
我可以为此编写一个shell脚本,但是这个功能肯定已经在CVS了吗?
更新:一些澄清:
我可以在特定日期获得模块的本地结账.问题是如何将其重新纳入CVS.
我确实有备份,但使用像CVS这样的修订控制系统的要点是它应该很容易获得任何历史状态.下次发生这样的事情时,我可能没有足够的幸运能够备份(例如备份是每天,所以我可能会失去一天的工作).
我知道CVS已经老了,我们应该转向更新的东西.但是在拥有大量基于CVS的工具(结账和构建脚本,夜间构建服务器等)的大型团队中,此类迁移的时间成本相当可观.(评估,更新脚本,测试,迁移,培训,丢失开发人员时间,并行维护两个系统,因为旧分支仍然需要CVS).因此,这必须由管理层规划和安排.
更新#2:我将在此开始赏金. 要获得赏金资格,您必须解释如何使用普通的CVS命令恢复,而不是使用hacky shell脚本.
更新#3:服务器是CVS 1.12.13.通过pserver访问.我可以在Linux PC上使用相同版本的CVS,或在Windows上使用CVSNT 2.0.51d客户端.
我想使用SCM,但我不知道哪个更好.管理我的代码有什么好处?
我有一个包含文件的大型CVS存储库,ISO-8859-1并希望将其转换为git.
当然我可以配置git ISO-8859-1用于编码,但我想有它utf8.
现在有了这样的工具,iconv或者recode我可以转换工作树中文件的编码.我可以用这样的消息来提交converted encoding.
我现在的问题是,是否有可能转换完整的历史记录?从cvs转换为git或之后.我的想法是编写一个脚本来读取git存储库中的每个提交并将其转换utf8为新的git存储库并将其提交.
这是可能的(我不确定哈希码以及如何遍历提交,分支和标签).或者是否有一个工具可以处理这样的事情?
在什么情况下这或不安全?我有一个分支有四个更改(没有文件添加或删除).删除是否安全?
编辑:想要删除它的原因是它被错误命名并将导致混淆.
来自CVS,我们有一个策略,提交消息应该用bug号标记(简单后缀"...... [9999]").CVS脚本在提交期间检查此项,如果消息不符合则拒绝提交.
git hook commit-msg在开发人员端执行此操作,但我们发现自动系统检查并提醒我们这一点很有帮助.
在git push期间,不运行commit-msg.推送期间是否有另一个钩子可以检查提交消息?
我们如何在git推送期间验证提交消息?
执行a时cvs update,您可以获得存储库状态的很好的摘要,例如:
M src/file1.txt
M src/file2.txt
C src/file3.txt
A src/file4.txt
? src/file5.txt
Run Code Online (Sandbox Code Playgroud)
有没有办法在没有实际更新的情况下获得这个?我知道有cvs status,但这是冗长的方式:
===================================================================
File: file6.txt Status: Up-to-date
Working revision: 1.2
Repository revision: 1.2 /var/cvs/cvsroot/file6.txt,v
Sticky Tag: (none)
Sticky Date: (none)
Sticky Options: (none)
Run Code Online (Sandbox Code Playgroud)
我当然可以制作一个脚本来完成从后者到前者的转换,但似乎浪费时间,因为cvs显然可以产生前者.
我们目前正在使用WinCVS,但它很慢并且没有合并对话框.我正在寻找像Eclipse的Team Synchronize这样的东西(所以人们可以看到他们在更新之前会得到什么).
你有什么建议?使用WinMerge的TortoiseCVS?
注意:OSS首选:)