天道酬勤,学无止境

SVN 无限循环 - [文件]“在存储库中不存在”(SVN Endless Loop - [file] “does not exist in repository”)

问题

这已经困扰我一个星期了。

SVN 一直告诉我某个文件“ does not exist in repository ”。

美好的。 让我们删除它。 忘掉它。 忽略它。 任何。 我并不真正关心这个文件(特别是如果它继续在夜间登记失败时)。

最奇怪的部分? “恢复”实际上会从存储库中恢复文件,因此它就在那里(可能已损坏?)。

...这必须是锦上添花。 如果我通过 Windows 资源管理器删除文件,SVN 将从存储库中恢复该文件,并在此之后声明它不存在于存储库中。 跆拳道?

有没有人知道如何摆脱这个?

我已经尝试过清理、还原、删除和其他任何可以想象的事情,但这一次让我难倒。

感谢您提供的任何提示...

回答1

您似乎很可能已经损坏了您的本地工作副本,例如通过移动文件夹或您使用 Windows 资源管理器进行的一些其他操作,但应该通过 TortoiseSVN 上下文菜单完成。 .svn文件夹中的信息现在不再与工作副本的状态匹配,这让 Subversion 感到困惑。

要解决此问题,请使用 Windows 资源管理器(而不是 TortoiseSVN)删除工作副本中的父文件夹(“Originals”)。 然后在您的工作副本的根目录执行 TortoiseSVN “更新”。 这应该按工作顺序恢复文件夹。

另一种选择是完全丢弃您的工作副本并重新结帐。

请注意,下一个版本的 Subversion (1.7) 将通过将所有元数据集中在根目录下的单个.svn文件夹中来减少损坏工作副本的机会。

回答2

我在损坏的工作副本方面遇到过类似的问题。 有时工作副本有很多待处理的更改但无法签入。 为了解决这个问题,我使用以下方法(svn 1.7+):

  1. 将新的工作副本签出到新目录(路径 2)
  2. 在新的工作副本中,如果有问题的文件存在,请根据需要将其删除。
  3. 提交新的工作副本
  4. 在新的工作副本中,删除除 .svn 目录之外的所有内容
  5. 将旧工作副本中除 .svn 目录之外的所有内容复制到新工作副本中。
  6. 再次提交新的工作副本
  7. 删除(或备份)旧的工作副本
  8. 将新工作重命名为旧工作副本(路径 2 到路径)
回答3

我遇到了类似的问题,其中我有一个文件夹,例如“FolderA”,即使我删除了它,它也始终显示在 svn update 中。 它甚至不会显示在文件夹列表中,但 svn 仍然会识别它,就好像它存在一样。

我按照以下步骤操作:

1.创建相同的文件夹名称,svn 在同一文件位置给出错误
2.将其添加到svn checkout。 由于它给出了冲突错误,我使用 svn 选项来解决它。
3.删除文件夹并提交我的svn。

错误已解决

标签

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • SVN Endless Loop - [file] “does not exist in repository”
    This has been plaguing me for a week. SVN keeps telling me that a certain file "does not exist in repository". Fine. Let's just delete it. Forget about it. Ignore it. Whatever. I don't really care about this file (especially if it continues to fail the nightly check-in). The most bizarre part? A "restore" will actually RESTORE the file from the repository, so its there (corrupted, maybe?). ...and this has to be the icing on the cake. If I delete the file through Windows Explorer, SVN will RESTORE the file from the repository, and right after that state that it doesn't exist in the repository
  • Angular 2 - 异步管道中的无限循环(Angular 2 - Endless loop in async pipe)
    问题 当我尝试绑定这样的异步函数时,我遇到了一个无限循环: <tr *ngFor="let i of items"> <td>{{myAsyncFunc(i) | async}}</td> </tr> 这是功能: private myAsyncFunc(i: string): Promise<string> { return Promise.resolve("some"); } 我做错了什么? 或者这是一个错误? 回答1 您在每次调用时都从myAsyncFunc(i: string)返回一个新的 Promise,这就是您得到“无限循环”的原因。 尝试返回相同的 Promise 实例 ;-) “无限循环”实际上不是传统的无限循环,而是async管道在其输入 Promise 解析时触发更改检测周期的副作用。 在这个新的变化检测周期中,angular 将调用myAsyncFunc(i: string)并获得一个新的 Promise 来观察,然后解决整个事情重新开始。 回答2 如果您的 async/observable 要求您传递一个参数(例如,您在 ngFor 循环中),也许您可​​以为此创建一个自定义异步管道。 @Pipe({ name: 'customPipe' }) export class customPipe implements PipeTransform {
  • Perl 搜索和替换进入无限循环(Perl search and replace enters endless loop)
    问题 我正在尝试使用匹配和替换多个文件中的一些字符串 local $/; open(FILE, "<error.c"); $document=<FILE>; close(FILE); $found=0; while($document=~s/([a-z_]+)\.h/$1_new\.h/gs){ $found=$found+1; }; open(FILE, ">error.c"); print FILE "$document"; close(FILE);' 它进入无限循环,因为替换的结果与搜索的正则表达式再次匹配。 但是s///g结构不应该避免这种情况吗? 编辑: 我发现foreach循环也不会完全按照我的要求执行(它将替换所有出现的事件,但只打印其中一个)。 原因似乎是 perl 替换和搜索在foreach()和while()构造中的行为完全不同。 为了有一个解决方案来替换多个文件,同时输出所有单独的替换,我想出了以下正文: # mandatory user inputs my @files; my $subs; my $regex; # additional user inputs my $fileregex = '.*'; my $retval = 0; my $opt_testonly=0; foreach my $file (@files){ print "FILE:
  • htaccess的多语言无限循环重定向规则(Endless Redirect Loop by htaccess rules multi language)
    问题 我不太擅长编写modrewrite访问规则,并且希望实现以下方案: virtual url /en/shop.php redirects to /shop.php?lang=en 已经知道了,但是实际的问题在modrewrite环境中: if url is '/' (empty) --> redirect to /en/ (/index.php?lang=en) if url is '/en' or '/de' --> redirect to /en/ or /de/ (add slash) if an uri is "defined" like /en/shop.php -> redirect to /shop.php?lang=en 我已经尝试了几个规则,但是最后一个规则导致了一个无休止的循环,我无法弄清楚出了什么问题.. :: /请帮助 这是我的.htaccess文件: RewriteEngine On RewriteBase / # empty url -> redirect to en/ RewriteRule ^$ en/ [R=301,L] # url is ONLY '/en' or '/de' -> redirect to /en/ or /de/ (adding slash) RewriteRule ^(en|de)$ $1/ [R=301,L] #
  • Nginx配置导致无限重定向循环(Nginx configuration leads to endless redirect loop)
    问题 因此,我研究了可以找到的每个示例配置,但是每次尝试查看需要ssl的页面时,都会遇到重定向循环。 我正在运行nginx / 0.8.53和乘客3.0.2。 这是ssl配置 server { listen 443 default ssl; server_name <redacted>.com www.<redacted>.com; root /home/app/<redacted>/public; passenger_enabled on; rails_env production; ssl_certificate /home/app/ssl/<redacted>.com.pem; ssl_certificate_key /home/app/ssl/<redacted>.key; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X_FORWARDED_PROTO https; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_set_header X-Url-Scheme $scheme; proxy_redirect off; proxy_max_temp
  • 无限循环:为什么无限循环?(Endless loop : why endless?)
    问题 试图找到一种从文档中删除空白页的方法,我编写了这个脚本,它可以很好地完成这项工作: function remove_blank() { var Doc = DocumentApp.openById('1ffmPF1iff1ORSPo4XLGyjQGrqVdXx2Py_zza6N_hV3g'); var dd = 1; var tt=''; var body = Doc.getActiveSection(); while(body.getNumChildren()>dd){ try{ Logger.log(body.getNumChildren()+' '+dd) var element = Doc.getChild(dd); var type = element.getType(); if( type == DocumentApp.ElementType.TABLE){++dd} if( type == DocumentApp.ElementType.PARAGRAPH ){ tt=element.getText(); if(tt!=' * '){element.removeFromParent();++dd} 编辑:这一行必须像这样改变: if(tt!=' * '){element.removeFromParent()}else{++dd} (删除元素时不要增加 dd
  • 如何在 Windows 批处理文件中连接字符串以进行循环?(How to concatenate strings in windows batch file for loop?)
    问题 我熟悉 Unix shell 脚本,但不熟悉 Windows 脚本。 我有一个包含 str1、str2、str3...str10 的字符串列表。 我想这样做: for string in string_list do var = string+"xyz" svn co var end 我确实找到了一些描述如何在批处理文件中连接字符串的线程。 但它以某种方式在 for 循环中不起作用。 所以我仍然对批处理语法感到困惑。 回答1 批量你可以这样做: @echo off setlocal EnableDelayedExpansion set "string_list=str1 str2 str3 ... str10" for %%s in (%string_list%) do ( set "var=%%sxyz" svn co "!var!" ) 如果您不需要变量!var! 循环中的其他地方,您可以将其简化为 @echo off setlocal set "string_list=str1 str2 str3 ... str10" for %%s in (%string_list%) do svn co "%%sxyz" 但是,像 CB 一样,如果可能的话,我更喜欢 PowerShell: $string_list = 'str1', 'str2', 'str3', ...
  • 在“while 循环”中使用“try and catch”块时的无限循环(Endless loop while using “try and catch ” block inside a “while loop”)
    问题 当我在while 循环中使用try 和 catch块时,我的程序有一个无限循环。 import java.util.*; class Try { public static void main(String args[]) { Scanner sc=new Scanner(System.in); while(true) { try { System.out.println("Enter a no "); int s=sc.nextInt(); } catch(Exception e) { System.out.println("Invalid input try again"); } } } } 当我输入一个整数时,它运行良好并要求另一个输入,但是当我输入一个字符时,它会进入无限循环。 为什么会这样? 回答1 当遇到无效输入时,您的程序将进入无限循环,因为 nextInt() 不消耗无效令牌。 因此,导致异常的任何标记都将保留在那里,并在您下次尝试使用 nextInt() 时继续引发异常。 这可以通过在 catch 块中放置一个 nextLine() 调用来解决导致抛出异常的任何输入,清除输入流并允许用户继续尝试。 回答2 你没有打破循环。 要结束循环,您需要插入 break; 无论您希望循环在何处结束。 回答3 为了解决这个问题,您需要清除输入流
  • GMMap AfterPageLoaded 无限循环(GMMap AfterPageLoaded Endless Loop)
    问题 几年前我使用 GMLIb 编写了一个应用程序,直到昨天它一直在运行。 我阅读了修复程序,得到了一个密钥,用 v1.5.4 和 v1.5.5 重新编译了代码并得到了相同的结果。 代码在 AfterPageLoaded 处陷入无限循环 if First then FGMMap.DoMap; 第一永远不是真的。 有没有其他人遇到过这个问题。 Win7 64 上的 XE7 20/05/2017 删除了 GMLib。 重新安装。 编译并运行 Megademo,结果是一样的。 AfterPageLoaded 的无限循环。 使用 GMMap 组件创建了一个简单的测试程序,结果是一样的。 回答1 我遇到了同样的问题,但现在似乎已经解决了!它发生在机器上装有 IE 8 版本的用户身上 - 但我真的不知道,为什么...... 但重要的是,将 IE 更新到最新版本即可解决问题! 回答2 不是一个答案,而是一个非常相似的问题 - 我认为 - 一种解决方法。 同样,这只会影响某些机器,大多数机器都安装了 IE10。 我的问题不是 First 永远不会是真的,而是它总是真的。 procedure TFMain.GMMapAfterPageLoaded(Sender: TObject; First: Boolean); begin if (First) and (PLCount = 0) then //
  • 如何通过 Javascript 中的 setTimeout 终止无限循环(How to terminate endless while loop via setTimeout in Javascript)
    问题 我有一段带有 while 循环的代码,我想通过 setTimeout() 停止它。 但这似乎是一个无限循环,永远不会触发 setTimeout()。 如果我删除 while 循环,超时将正确触发。 请问有什么问题? $(document).ready(function() { var i = 0, s = false; setTimeout( function() { s = true; console.log( "Timeuot!!!" ); console.log( "s value is " + s ); }, 1000 ); while( s === false ) { console.log( "this is while and s is " + s ); i++; } console.log( "iterations: " + i ); }); 回答1 JavaScript 运行单个事件循环。 它不会在函数中间停下来查看是否有任何事件(例如点击或超时)会触发不同的函数。 简而言之:在 while 循环完成之前,它不会运行定时函数。 要做这种事情,你通常会有一个事件驱动的迭代器。 var i = 0, s = false; setTimeout(function() { s = true; console.log("Timeuot!!!"); console
  • C / C ++中的无限循环(Endless loop in C/C++ [closed])
    问题 关门了。 这个问题是基于意见的。 它当前不接受答案。 想改善这个问题吗? 更新问题,以便通过编辑此帖子以事实和引用的形式回答。 7年前关闭。 改善这个问题 有几种方法可以进行无限循环,以下是我可以选择的几种方法: for(;;) {} while(1) {} / while(true) {} do {} while(1) / do {} while(true) 是否应该选择某种形式? 现代编译器是否在中间语句和最后一条语句之间有所不同,还是意识到这是一个无穷循环,并完全跳过了检查部分? 编辑:正如已经提到的,我忘记了goto ,但是这样做是出于我根本不喜欢将其作为命令的原因。 Edit2:我对来自kernel.org的最新版本做了一些grep。 我确实认为随着时间的推移并没有太大变化(至少在内核中) 回答1 提出这个问题的问题是,您会得到很多主观答案,而这些答案只是简单地说“我喜欢这个...”。 与其说这样无意义的陈述,不如说是用事实和参考而非个人观点来回答这个问题。 通过经验,我们可能可以从排除do-while替代方案(以及goto)开始,因为它们不常用。 我不记得曾经在专业人员编写的实时生产代码中看到它们。 while(1) , while(true)和for(;;)是实际代码中通常存在的3个不同版本。 它们当然是完全等效的,并且导致相同的机器代码。 for(;;)
  • svn https:“ra_serf:SSL 通信期间发生错误”(svn https: “ra_serf: An error occurred during SSL communication”)
    问题 我知道这与其他帖子的标题相同,但我已经搜索并搜索过,但找不到解决方案。 我在所有机器上从 TortoiseSVN 1.6 升级到 1.8.4。 我的主要开发机器开始收到此错误: ra_serf: An error occurred during SSL communication 我的客户正在使用 ProjectLocker.com,所以我无法检查服务器日志。 从我从各个站点上的其他帖子中可以看出,该问题是由网络堆栈或 SSL 问题引起的。 我已经卸载并重新安装了乌龟大约 5 次。 我唯一的猜测是:我第一次安装时,它要求我关闭所有程序和 Windows 资源管理器。 安装后它重新启动了资源管理器。 和所有其他安装一样,它不会关闭资源管理器。 某些内容已损坏,随后 Tortoise 的安装不会替换损坏的文件。 我已按照以下方式重置网络堆栈:http://www.windows-secrets.co.uk/2013/08/repair-the-windows-87vista-tcpip-stack/ 任何想法如何完全删除 Tortoise 1.8.4? 任何想法我还能尝试什么? 我无法结帐我正在处理的项目,它正在杀死我。 我真的不想在这台机器上重新安装 windows。 我相信那会解决它,但我不想去那里。 回答1 这个问题很有可能在最新的 TortoiseSVN 1.8.x
  • Rails 4:after_update 回调导致无限循环(Rails 4: after_update callback leads to endless loop)
    问题 我在我的用户模型中使用 after_update 回调。 模型用户.rb after_update :check_phone check_phone phone_validation if phone_changed? end def phone_validation code = Array.new(8){rand(36).to_s(36)}.join self.phone_verification_code = code self.save end 然而,这会导致无限循环。 问题是在 phone_validation 方法中 self.save 之后self.save调用了回调。 phone_changed? 显然仍然返回true 。 我怎样才能改变这种行为? 回答1 试试这个: 用户名 attr_accessor :phone_checked after_update :check_phone, :unless => "phone_checked" check_phone phone_validation if phone_changed? end def phone_validation code = Array.new(8){rand(36).to_s(36)}.join self.phone_verification_code = code self.phone
  • 无休止的 While 循环是否占用 CPU 资源?(Does endless While loop take up CPU resources?)
    问题 据我了解,您编写的 Linux 守护程序会无限循环地侦听请求。 就像是.. int main() { while(1) { //do something... } } 参考:http://www.thegeekstuff.com/2012/02/c-daemon-process/ 我读到睡眠程序会使其进入等待模式,因此它不会占用资源。 1.如果我希望我的守护进程每 1 秒检查一次请求,以下是否会消耗资源? int main() { while(1) { if (request) { //do something... } sleep(1) } } 2.如果我取消睡眠,是不是意味着CPU消耗会增加100%? 3.是否可以无限循环运行而不消耗资源? 说..如果它什么都不做,只是循环自己。 或者只是睡觉(1)。 无休止的循环和 CPU 资源对我来说是个谜。 回答1 是否可以在不消耗资源的情况下无限循环? 说..如果它什么都不做,只是循环自己。 或者只是睡觉(1)。 还有一个更好的选择。 您可以只使用semaphore ,它在循环开始时保持阻塞状态,并且您可以在希望循环执行时向信号量发出信号。 请注意,这不会消耗任何资源。 回答2 poll和select调用(由 Basile Starynkevitch 在评论中提到)或信号量(由 Als 在回答中提到)是等待请求的正确方法
  • Node.js:如何使用异步模块执行无限循环(Node.js: How to perform endless loop with async module)
    问题 我需要进行 HTTP 调用,然后将响应放入数据库中。 我应该永远重复一遍。 我一直在阅读异步模块,但我不明白如何将这些操作与每次迭代之间的等待几秒钟结合起来。 有人可以帮忙吗? 提前致谢。 回答1 查看 async.forever。 您的代码如下所示: var async = require("async"); var http = require("http"); //Delay of 5 seconds var delay = 5000; async.forever( function(next) { http.get({ host: "google.com", path: "/" }, function(response) { // Continuously update stream with data var body = ""; response.on("data", function(chunk) { body += chunk; }); response.on("end", function() { //Store data in database console.log(body); //Repeat after the delay setTimeout(function() { next(); }, delay) }); }); }, function
  • 如何在无限循环中每 4 分钟回显一次(How to echo something every 4 minutes while in an endless loop)
    问题 我有一个使用while(true)运行的脚本,因此它会一直运行直到它死掉。 我希望能够每 4 分钟回声一次,我该怎么做? 该脚本在命令提示符下运行,它使用while(true)所以它令人困惑,而且我不知道如何让它每 4 分钟执行一次。 我怎样才能让它在一段while(true)内每 4 分钟回声一次while(true) ? 回答1 你可以试试 while(true) { sleep(240); // sleep for 240 sec echo " Hello World" ; } 或者 $time = time(); while ( true ) { /* * Play Some Ball */ if ((time() - $time) >= 240) { echo date("Y:m:d g:i:s"), PHP_EOL; $time = time(); } sleep(2); } 输出测试Time = 2 sec, Sleep = 1 sec 2012:10:14 12:50:56 2012:10:14 12:50:58 2012:10:14 12:51:00 2012:10:14 12:51:02 2012:10:14 12:51:04 2012:10:14 12:51:06 2012:10:14 12:51:08 2012:10:14 12:51:10 2012
  • 使用 git-svn 时模拟 subwcrev(Emulate subwcrev when using git-svn)
    问题 我使用 git-svn 与包含一些 C++ 项目的现有 SVN 存储库进行交互。 subwcrev.exe 用作预构建事件以更新 C++ 标头 (svnversion.h) 中的某些字符串。 这些字符串被硬编译为生成的二进制文件的一些版本信息。 由于 subwcrev 需要 .svn 元数据才能工作,因此在 git-svn 工作副本上使用时,预构建事件将失败。 所以我想出了以下 bash 脚本,我将其用作我的 git 存储库的提交后和结帐后挂钩。 该脚本尝试根据 git svn info 的输出(缓存在本地文件中)执行与 subwcrev 相同的操作。 #!/bin/sh if [ ! -f svninfo ] ; then git svn info > svninfo fi revision=`sed -e "/Revision/!d" -e "s/Revision: \(.*\)/\1/" svninfo` lastchange=`sed -e "/Last Changed Rev/!d" -e "s/Last Changed Rev: \(.*\)/\1/" svninfo` # Get the last changed date, extract timestamp, replaces dashes with slashes changedate=`sed -e "
  • 是否进行“ git导出”(如“ svn导出”)?(Do a “git export” (like “svn export”)?)
    问题 我一直在想是否有一个好的“ git export”解决方案来创建没有.git存储库目录的树的副本。 我至少知道三种方法: git clone然后删除.git存储库目录。 git checkout-index暗示了此功能,但以“仅将所需的树读入索引...”开头,我不确定该怎么做。 git-export是第三方脚本,其本质上是将git clone到一个临时位置,然后将rsync --exclude='.git' git clone到最终目标位置。 这些解决方案都没有使我感到满意。 最接近svn export选项可能是选项1,因为这两个选项均要求目标目录首先为空。 但是,假设我能弄清楚将树读入索引的含义,选项2似乎更好。 回答1 可能最简单的方法是使用git archive。 如果您真的只需要扩展树,则可以执行以下操作。 git archive master | tar -x -C /somewhere/else 在大多数情况下,我需要从git中“导出”某些内容,无论如何我都想要压缩的存档,所以我要做类似的事情。 git archive master | bzip2 >source-tree.tar.bz2 ZIP存档: git archive --format zip --output /full/path/to/zipfile.zip master git
  • AngularJS内部的调用函数陷入无限循环(Calling function inside AngularJS goes in endless loop)
    问题 我是AngularJS的新手,我正在构建一个示例应用程序。 我想在我的网页上显示Google Maps响应的结果。 在这里,我传递了示例值,但是该页面进入循环并给出此错误: Error: [$rootScope:infdig] 10 $digest() iterations reached. Aborting! Error: [$rootScope:infdig] 10 $digest() iterations reached. Aborting! var app = angular.module('myApp', ['ui.bootstrap']); app.controller('myCon', function($scope, $http) { $scope.getAddress = function(url){ return $http.get('https://maps.googleapis.com/maps/api/distancematrix/json?origins=Toronto+ON&destinations='+url+'&mode=driving').then(function(response){ return response.rows[0].elements[0].distance.text; }); }; 这是HTML页面: <!DOCTYPE
  • 意外的无限字节 for 循环(Unexpected endless byte for loop)
    问题 我有以下循环: for (byte i = 0 ; i < 128; i++) { System.out.println(i + 1 + " " + name); } 当我执行我的程序时,它会无限循环地打印从 -128 到 127 的所有数字。 为什么会发生这种情况? 回答1 byte 是 1 字节类型,因此可以在 -128...127 之间变化,因此条件 i < 128 始终为真。 当您将 1 添加到 127 时,它会溢出并在(无限)循环中变为 -128 等等...... 回答2 127 之后,当它递增时,它将变为 -128,因此您的条件将不匹配。 byte : byte数据类型是一个 8 位有符号二进制补码整数。 它的最小值为-128 ,最大值为127 (含)。 byte数据类型可用于在大型数组中节省内存,其中内存节省实际上很重要。 它们也可以代替int使用它们的限制有助于澄清您的代码; 变量范围有限的事实可以作为一种文档形式。 它会像这样工作: 0, 1, 2, ..., 126, 127, -128, -127, ... 因为 8 位可以表示最多 127 的有符号数。 有关原始数据类型,请参见此处。 图片胜过千言万语 回答3 因为字节是在 Java 中签名的,所以它们总是小于 128。 为什么 Java 选择有符号字节从时间的深处看是个谜。