我正在将一个存储库从sourcesafe转移到subversion,我需要确保关键点是平等的。是否有任何现有的Windows命令/工具允许我比较它们相同的两个文件夹树(具有相同的文件夹结构和相同内容的文件)?理想情况将是命令行:
some_cool_compare c:\current_vss c:\current_svn -exclude .svn;*.vspscc;*.scc
是否存在某些工具/命令或我需要编写自己的脚本?
答案 0 :(得分:41)
答案 1 :(得分:30)
Beyond compare允许您这样做以及更多。
这是我不能没有的工具之一 查看here以获取脚本选项的参考
答案 2 :(得分:9)
您还可以在两个文件夹中执行tree > tree.txt
,然后使用任何基于文件的差异工具(git diff)对两个tree.txt文件进行区分。
答案 3 :(得分:8)
由于我不愿意在我的机器上安装新程序,因此这个PowerShell脚本(来自Hey, Scripting Guy! Blog)帮助我解决了我的问题。我只修改了适合我案例的路径:
$fso = Get-ChildItem -Recurse -path F:\songs
$fsoBU = Get-ChildItem -Recurse -path D:\songs
Compare-Object -ReferenceObject $fso -DifferenceObject $fsoBU
答案 4 :(得分:4)
loc
是来自Microsoft的免费应用程序,预览"比较两条路径的模式。例如:
然后,您可以选择三种模式中的一种("同步"," Echo"" Contribute")以解决差异。
最后,它附带{{1}},用于从CLI或计划任务创建和同步文件夹对。
答案 5 :(得分:3)
您可以将git用于此目的。基本上,您在文件夹A
中创建了一个git存储库(存储库位于A/.git
),然后将A/.git
复制到B/.git
,然后更改为B
文件夹,简单地通过运行git diff进行比较。
使用--exclude
可以实现.gitignore
功能。
所以,坚持你的例子(但在Linux上使用bash shell):
# Create a Git repo in current_vss
pushd current_vss
printf ".svn\n*.vspscc\n*.scc" >> .gitignore
git init && git add . && git commit -m 'initial'
popd
# Copy the repo to current_svn and compare
cp -r current_vss/.git* current_svn/
pushd current_svn
git diff
答案 6 :(得分:1)
与OP一样,我一直在寻找一个Windows文件夹差异工具,特别是可以处理非常大的树(100千兆字节数据)的工具。感谢Lieven Keersmaekers指向BeyondCompare的指针,我发现它比我以前的旧学校工具windiff非常快(大约快10到100倍)。
除了GUI之外,BeyondCompare确实有一个命令行模式。答案 7 :(得分:1)
您尝试过: https://www.araxis.com/merge/index.en 它允许可视化更改并有选择地合并文件和文件夹中的特定差异。