如果Subversion工作副本是从存储库中部分签出,使用--depth
和/或--set-depth
(可能带有exclude
),是否有办法显示节点那些'缺失'(递归或非递归)?我并不是说在svn status
和!
意义上缺少一个节点被检出但在本地删除而没有告诉SVN。相反,我的意思是存储库中的一个节点最初没有从存储库中检出,或者在以后被排除。
svn info
可用于显示节点的深度。
ls
或dir
可能会与svn ls
进行比较。 (ls -r BASE
并不像我期望的那样获得工作副本。)
svnversion
表示WC部分带有'P'。
(似乎没有--dry-run
选项与--set-depth
svn update
一起使用。同样svn diff -rBASE:HEAD --depth=immediates
也不会产生我寻求的信息。)
有一些直接的方法吗?如果有一个“符合条件”的节点列表可用于结帐或更新,那就太好了。
感谢。
答案 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)
这是一个非常老的问题,但是我正在搜索同一件事,这就是我找到的全部内容。
我当前的解决方案使用find
,grep
和svn 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”