【问题标题】:How can I commit multiple directories at once using subversion?如何使用颠覆一次提交多个目录?
【发布时间】:2010-10-27 02:27:41
【问题描述】:

我尝试使用 svn ci dir/a dir/b -m "my comment" 但这不起作用。我还使用了 svn ci dir/a/* dir/b/* -m "my comment" 它也不起作用。

我知道你可以指定多个文件,但是我如何告诉 subversion 签入这些文件夹中所有修改过的文件?我主要想这样做,以便我的所有更改都在一个修订版中生效。我可以一次签入一个目录,但这最终会为每个目录提供不同的修订版..

【问题讨论】:

  • 所以说 dir/c 中有许多其他修改过的文件是您不想提交的?
  • 目录中有很多我想要签入的修改过的文件。我知道 svn commit 只会签入我修改过的文件,这正是我想要的。我不担心我不想提交的文件,如果这回答了你的问题..

标签: svn commit checkin


【解决方案1】:
svn add dir/a
svn add dir/b
svn commit

不过,你更可能在想:

svn add dir/*
svn commit

【讨论】:

  • 目录已经在仓库中了,我只想签入本地修改过的文件。
  • 如果它们已经被添加,只需执行“svn commit”即可覆盖它。
【解决方案2】:

我认为您只有 1 个选项:签入包含目录 - 将这两个目录都作为子目录的目录。

如果它们还没有这样组织(即它们都是 repo 中的顶级目录),那么你可以做的事情并不多 - svn 命令只能在单个目录上工作。

【讨论】:

  • 它们共享一个共同的顶级目录,但该目录相当...巨大,还有许多其他子文件夹。
  • 很公平,这只是意味着 svn 将花费更长的时间来搜索它们以找到所有需要提交的文件。如果没有,那么它出奇的快。尝试使用 svn status 来查看(status 会比 ci BTW 花费更长的时间)
  • svn commit 将适用于多个目录,但前提是它们都在同一个工作副本中。如果有你不想要的东西,你可以使用 subversion 1.5 的稀疏目录来制作一个更小、更简洁的工作副本。
【解决方案3】:

如果您从更高级别的文件夹中签出 a 和 b 的位置,这很容易。因此,如果您的工作副本是“dir”并且 a 和 b 有更改,请提交“dir”以提交对两者的更改。我一直这样做。

编辑:
要提交多个文件夹,您需要将它们放在同一个工作副本中。

如果您担心要处理的内容太多,您可以尝试只使用您需要的文件夹进行稀疏签出,然后您可以根据需要提交基本目录或子目录,而无需其他项目的开销。

Sparse Directories Information

【讨论】:

    【解决方案4】:

    您可能需要指定“但这不起作用”是什么意思,因为它在这里可以正常工作:

    D:\Projects>svn commit -m 'test1' test\aaa "test\aaa bbb ccc"
    Sending        test\aaa\aaa222\xxx.txt
    Sending        test\aaa bbb ccc\aaa.txt
    Transmitting file data ..
    Committed revision 8.
    
    D:\Projects>
    

    【讨论】:

    • 我想知道它们是否是单独的工作副本?那会失败吗?
    • 是的,它会失败。 OTOH,我们不知道 OP 工作副本的布局,所以它可能是也可能不是它“不起作用”的原因。
    • C:\zoo>svn ci c:\zoo\tiger c:\zoo\lion -m "my comment" svn: 'C:\zoo' is not a working copy 这是错误我明白了。如果我只传递一个目录它会起作用,但是当我给它第二个目录时它会出错。
    • 查看我的更新:稀疏目录。您可以拥有一个仅包含您关注的项目的工作副本,并且可以轻松地同时提交对两者的更改。
    【解决方案5】:

    考虑使用 svn:externals 属性来检出存储库的一部分。您可以选择要获取的目录,然后在一个步骤中提交到多个目标。一段时间以来,我们一直在使用这种方法并取得了巨大的成功。

    【讨论】:

    • 我强烈建议您现在在 SVN 中查看稀疏目录,如果您使用的是 Tortoise,那么它会尽可能简单 - 非常棒。
    【解决方案6】:

    考虑到下面是查询

    1. 您有很多文件从存储库中检出到多个目录中,其中许多文件已被修改,您不记得哪些文件被修改了,您很难一次合并一个文件,然后执行以下操作

    进入顶层目录,运行命令

    svn ci -m "comments"
    

    这会将顶层目录下的所有修改文件以及它下面的许多子目录签入。

    【讨论】:

      【解决方案7】:

      遇到了类似的问题。我有一个存储库,我需要有一些存储库子文件夹的两个单独的工作副本。仓库是这样的:

      /web/lib
      /web/htdocs
      ...
      

      ...我需要在单独的工作副本中(分别):

      C:/.../web/lib
      C:/.../htdocs/cbs
      

      我通过在C:/.../web 中拥有/web 的“主”工作副本并在C:/.../htdocs/cbs“指向”C:/.../web/htdocs 中创建硬链接(或 NTFS 结点)来解决此问题。因此,每当我在其中一个工作副本中进行本地更改时,我总是提交C:/.../web,它自然包含来自两个工作副本的更改。

      我希望这种方式对你有用。

      【讨论】:

        【解决方案8】:

        这个问题已经很久没有问过了,但是我有任何迟到的更新。

        假设您有一个像 dir/a、dir/b、dir/c、dir/d.... 这样的树并且只想在子文件夹 a 和 b 中提交更改,则以下命令有效:

        svn ci dir/a/* dir/b/* -m "我的评论"

        如果你在 7 年前尝试它时确实没有用,我只能假设这个功能是在后续版本中添加的。

        【讨论】:

          【解决方案9】:

          您可以使用 --changelist 选项,在顶级目录创建一个包含您要提交的所有文件的更改列表,然后提交该更改列表。

          来源和信息: svn book: changelist

          【讨论】:

            猜你喜欢
            • 2011-04-29
            • 2010-10-04
            • 2011-02-25
            • 1970-01-01
            • 1970-01-01
            • 2011-02-13
            • 1970-01-01
            • 2011-09-01
            • 2011-02-12
            相关资源
            最近更新 更多