【问题标题】:SVN in-place import and checkoutSVN 就地导入和签出
【发布时间】:2010-10-15 06:33:57
【问题描述】:

使用 Linux 命令行和Subversion,是否可以获取目录并为其添加版本控制?

基本上,我想将目录导入到新创建的存储库中,但也希望目录成为工作副本,而无需检查它。

【问题讨论】:

  • 为什么这个问题是社区维基?

标签: linux svn version-control


【解决方案1】:

假设您使用 svnadmin 在 /svn/foo/mydirname 创建了一个存储库,并且您想要对 /home/user/mydirname 进行版本控制(这就是您的意思吗?)。

然后执行以下操作:

cd /home/user/mydirname
svn co file:///svn/foo/mydirname . #This only creates the ".svn" folder for version control
svn add ./*                        #Tell svn you want to version control all files in this dir
svn ci                             #Check the files in

您的目录现在受版本控制!

【讨论】:

  • hmmm,它在那里使用 c 样式的 cmets 进行突出显示。真烦人。
  • 我认为它需要一个尾随点,对吧? "svn co file:///svn/foo/mydirname ."
  • 我希望我在rm -rf 编辑我的目录以便结帐之前阅读此内容。
  • FWIW,如果您要检入子目录(而不是 repo 的根目录),并且该目录不存在,您可以使用 svn mkdir 命令创建您要检入的目录- 例如:svn mkdir --parents svn.foo.com/svn/projects/myProject/trunk
  • 为我工作!谢谢!我删除了旧的 .svn 文件夹,签出,然后添加,然后从 TortoiseSVN gui 提交,它工作了。
【解决方案2】:

是的,您可以将现有目录(包含内容)导入 SVN 存储库,并将当前位置用作受版本控制的工作副本。如下所示:

假设您的(未版本化的)项目源位于 /home/user/projectx,并且您的存储库已在 file:///svnrepo 中准备就绪

  1. 首先,在项目树之外的某处创建一个空目录,例如 /tmp/empty。在您的 Subversion 存储库中导入该空目录:

    cd /tmp/empty
    
    svn import . file:///svnrepo/projectx
    
  2. 进入您填充的项目目录。现在查看您在第 1 步中创建的存储库位置:

    cd /home/user/projectx
    
    svn checkout file:///svnrepo/projectx .
    

这会将 .svn 文件添加到您填充的项目目录中,但它不会做任何其他事情,因此您现有的文件是安全的。

  1. 接下来,将包含文件的目录添加到存储库:

    svn add *
    
    svn commit -m 'initial commit'
    

完成。

【讨论】:

  • 需要加上--force,否则svn会停止并报错“svn: Failed to add file 'FILE': an unversioned file has already exists
  • 执行此过程时,我在添加的每个子目录上收到错误“svn:E155015:[目录] 是现有的冲突项目;请在添加新项目之前将冲突标记为已解决”。我必须在“svn --force add *”工作之前解析每个子目录,使用命令“svn resolved [directory]”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-06
  • 2010-12-14
  • 2011-02-20
  • 2012-03-09
  • 2010-11-06
  • 2010-09-11
相关资源
最近更新 更多