SVN能否显示与部分结账有关的信息?

时间:2010-11-30 13:11:55

标签: svn

如果Subversion工作副本是从存储库中部分签出,使用--depth和/或--set-depth(可能带有exclude),是否有办法显示节点那些'缺失'(递归或非递归)?我并不是说在svn status!意义上缺少一个节点被检出但在本地删除而没有告诉SVN。相反,我的意思是存储库中的一个节点最初没有从存储库中检出,或者在以后被排除。

svn info可用于显示节点的深度。

lsdir可能会与svn ls进行比较。 (ls -r BASE并不像我期望的那样获得工作副本。)

svnversion表示WC部分带有'P'。

(似乎没有--dry-run选项与--set-depth svn update一起使用。同样svn diff -rBASE:HEAD --depth=immediates也不会产生我寻求的信息。)

有一些直接的方法吗?如果有一个“符合条件”的节点列表可用于结帐或更新,那就太好了。

感谢。

5 个答案:

答案 0 :(得分:4)

svn ls --depth immediates .

将显示当前文件夹的子文件和文件夹,即使它们尚未签出。

使用ls -1的输出进行区分会产生未检出的文件/文件夹列表:

svn ls --depth immediates . > immediates.txt
ls -1 > checkedout.txt
diff immediates.txt checkedout.txt

答案 1 :(得分:0)

可能是我误解了,但是

svn update 

有一个--set-depth选项,因此您可以将现有的工作副本更改为新的级别。

答案 2 :(得分:0)

如果我们有这个存储库路径,

ROOT
  |--trunk
  |   |-- index.php
  |   `-- app
  |--tags
  `--branches

此命令将显示哪些文件(或目录)是ROOT节点的子项。

svn ls --depth immediates URL/to/ROOT/

输出:

trunk/
tags/
branches/

使用输出,您可以使用

更新每个节点
svn update --set-depth=infinity trunk/

答案 3 :(得分:0)

这是一个非常老的问题,但是我正在搜索同一件事,这就是我找到的全部内容。

我当前的解决方案使用findgrepsvn info,足以满足我当前的用例。我在这里发布它可以帮助其他人,可以随时进行改进:)

find . -type d -maxdepth 2 -not -path '*/\.*' -exec svn info {} \; | grep -E "(^Path|^Depth)" 

这将使所有目录的深度最大为2,忽略隐藏的目录,并输出相应的路径和深度(如果已设置)。

很高兴有一个为此生成svn-viewspec文件的脚本。

答案 4 :(得分:0)

现在有一个简单的方法可以做到这一点,以后会有很多 Subversion 版本。对于来到这里寻找一种方法来查找被排除的稀疏目录的其他人:

svn info --depth infinity --show-item=depth .

稀疏目录然后显示在以 exclude 开头的行上。最初的海报在后续评论中澄清说,他们理想地希望显示排除的项目。我知道后续评论也提到了理想情况下也想要跨平台的东西,但在大多数 shell 中过滤行通常非常简单。例如:

svn info --depth infinity --show-item=depth . | egrep ^exclude

然后在每行的开头截断 exclude,具体取决于您的环境:

svn info --depth infinity --show-item=depth . | egrep ^exclude | sed -e 's/^exclude *//'

所有这些命令都应该可以在带有 WSL 的 Linux、macOS 和 Windows 中使用。 PowerShell 有等价物,我还没有尝试过:“https://stackoverflow.com/questions/53867147/grep-and-sed-equivalent-in-powershell”