【问题标题】:how do i know if my working copy is out of sync我如何知道我的工作副本是否不同步
【发布时间】:2018-09-07 02:31:20
【问题描述】:

我们将当前发布代码的图像保存在某个本地目录中,并且为了构建代码,我们使用该目录中的代码。在构建脚本中,我需要一种方法来确定图像目录中的代码是否与存储库中的当前发布分支同步。如果是这样,我将在脚本中进行 svn 更新。修订号可以以某种方式用于检测不同步情况吗?如果有怎么办?

瓦迪拉杰

【问题讨论】:

    标签: svn


    【解决方案1】:
    svn status -u
    

    添加工作版本和服务器过期信息。

    如果目录中没有非版本化文件,那么只有当 status 命令没有返回任何内容时,它才是最新的。 否则 * 表示它不是最新的,?表示非版本化、M-修改等。

    换句话说,当且仅当以下返回 0 时,它才是最新的:

    svn status -u | grep -E -c "^\s+[^\?]"
    

    【讨论】:

    • 对不起,我在标题中写了工作副本。它实际上不是工作副本,而是源代码的图像。我们不会在这里修改任何文件,而且所有内容都是版本化的。因此,如果我对 * 执行 svn status -u 和 grep 并且发现 *s 意味着它不同步,那么我将执行 svn 更新。但是当我进行 svn update 时,是否会出现冲突。我们在这个本地目录中没有 M 文件。如果确实出现冲突,我将如何通过脚本解决它?
    • 做 svn checkout 也会带来最新的文件,对吧? svn checkout 和 svn update 有什么区别?
    • 如果您不修改副本并且只定期更新它 - 那么不会有任何冲突
    • svn checkout 正在创建一个工作副本 - 只完成一次。 svn update 可以在已经签出的工作副本上完成 - 它更新到最新版本
    • 我认为正则表达式不正确。如果这个想法是匹配任何空白行,那么 *、?、M 等。它只匹配一个“?”。另一种方法是 svn status -u |厕所-l。如果是最新的('Status against revision: xxxx'),这将是 1,但如果有任何本地或远程更改,则大于 1。
    【解决方案2】:

    快速直接的方式:

    repoVersion="$(svn status -u --depth empty <myWCdir> | awk '{print $NF}')"
    wcVersion="$(svn info --show-item revision <myWCdir>)"
    

    然后你可以比较这两个数字,如下所示:

    if [[ $repoVersion -eq $wcVersion ]]; then
        echo "<myWCdir> is up to date"
    else
        echo "<myWCdir> is out of date"
    fi
    

    注意:普通的svn status -u 太过分了。如果任何内容发生变化(在任何深度),SVN 会改变目录的 rev#。

    【讨论】:

      猜你喜欢
      • 2010-11-22
      • 1970-01-01
      • 1970-01-01
      • 2018-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-13
      • 1970-01-01
      相关资源
      最近更新 更多