如何递归添加CVS目录

时间:2020-03-05 18:38:25  来源:igfitidea点击:

我玩过CVS有点,对它的所有功能都不是最熟悉的,但是对我来说,一个巨大的烦恼是试图添加包含更多目录的新目录。运行"cvs add"只会添加当前目录的内容,并且使用"cvs import"看起来也不是正确的选择,因为它仍然是我正在生成的所有代码(此方法声称导入是针对第三次的派对来源)

你们是否知道将给定目录中的所有内容递归添加到当前CVS项目中的任何方法(或者如果SVN或者git使此操作特别容易)?

解决方案

回答

SVN无疑使这项琐碎的任务变得很简单,但是使用像Tortoise这样的GUI更加容易。

这可能是一个不错的起点:http://www-mrsrl.stanford.edu/~brian/cvstutorial/

回答

我认为这是我在CVS时代所做的:

find . -type f | xargs cvs add

回答

啊,空格。这将与空格一起使用:

find . -type f -print0| xargs -0 cvs add

回答

Mark的解决方案解决了空间问题,但产生了此问题:

cvs add: cannot open CVS/Entries for
  reading: No such file or directory 
 cvs
  [add aborted]: no repository

要修复它,实际使用的命令是:

find . -type f -exec cvs add {} \;

回答

首先将所有目录添加到CVS

find . -type d -print0| xargs -0 cvs add

然后将目录中的所有文件添加到CVS

find . -type f -print0| xargs -0 cvs add

回答

cvs import不仅适用于第三方资源。实际上,目录不是由CVS进行版本控制的,因此它们不受分支策略的约束。只要导入空目录,就可以了。

回答

请注意,我们只能对已经签出的工作副本内的文件和文件夹使用cvs add,否则将收到"无法打开CVS /条目以供读取"消息。此WinCVS常见问题解答中介绍了使用cvs add创建新的"根模块"的技术:http://cvsgui.sourceforge.net/newfaq.htm#add_rootmodule

如果我们使用的是Windows,TortoiseCVS和WinCVS都支持在单个操作中对多个文件进行递归添加(和可选的提交)。在WinCvs中,查找宏Add> Recursive Add(自动提交)...在Tortoise中,在目录上使用Add Contents命令。两者都允许我们选择要添加的文件以及要使用的关键字扩展模式(主要用于定义二进制文件)。

有关在WinCvs中添加递归的更多信息,请参见:http://cvsgui.sourceforge.net/newfaq.htm#cvs-add_recursive

除此之外,cvs import非常适合批量添加。但是,在普通CVS中实现cvs import的方式有两个缺点(因为它最初是为第三方代码编写的):

  • 它创建具有特殊语义的强制分支。
  • 它不会创建将导入的代码建立为检出的工作副本所需的存储库元数据(即,隐藏的CVS目录),这意味着要真正使用导入的文件,首先必须将其检出。资料库

如果我们使用的是CVSNT,则可以通过在导入时指定-nC选项来避免这两个缺点。 -n用于避免" vendor"分支,而-C用于创建CVS目录。

回答

我正在使用这个简单的shell脚本,应该从已经签出的CVS目录开始。它会愚蠢地尝试添加/提交在递归搜索中找到的任何文件和目录,因此最后我们应该得到一个完全提交树。

只需将其另存为" / usr / bin / cvsadd"之类,别忘了使用" chmod + x / usr / bin / cvsadd"。

#!/bin/sh
# @(#) add files and directories recursively to the current CVS directory
# (c) 2009 by Dirk Jagdmann 

if [ -z "" ] ; then
    echo "usage: cvsadd 'import message'"
    exit 1
fi

if [ -d "" ] ; then
    cvs add ""
    cd "" || exit 1
fi

if [ ! -d CVS ] ; then
    echo "current directory needs to contain a CVS/ directory"
    exit 1
fi

XARGS="xargs -0 -r -t -L 1"

# first add all files in current directory
find . -maxdepth 1 -type f -print0 | $XARGS cvs add
find . -maxdepth 1 -type f -print0 | $XARGS cvs ci -m ""

# then add all directories
find . -maxdepth 1 -type d -not -name CVS -a -not -name . -print0 | $XARGS "
find . -type d -print0| xargs -0 cvs add
" ""

回答

首先将所有目录添加到CVS

find . -type f | grep -v CVS | xargs cvs add

然后将目录中的所有文件添加到CVS

##代码##

为我工作