svn checksum mismatch解决办法之一

将要提交的文件(提交该文件时出现checksum mismatch错误)所在目录的.svn文件夹替换为最新(svn服务器上的.svn文件夹)的即可!
 
参考:
----------------------------------------------------------------------------------------------------------------------------------------

How-to recover from checksum mismatch errors in SVN


You know Coda, the text editor I sometimes rave  about? Like many text editors, it has this handy feature for doing global searches and replaces. But, unlike any other I’ve ever seen, it will happily, and without prompting for an administrator password, let you replace text in files for which you don’t have permission to write. You know, like Subversion  repo copies. D’oh!

Don’t get me wrong. I love Coda. I love it enough to choose to spend most of every day with it front-and-center on my screen. But, for the life of me, I can’t imagine why it allows me to replace, without prompting me for an administrator password, text in a file with the following permissions:
-r--r--r--
For the uninitiated, the distinct lack of w’s in that line is supposed  to mean that the file is read-only.
Enough, already! Show me how to fix it!
Whatever the reason, Coda changed the files, which just happened to be the Subversion (SVN) reference versions of some of my repository files. The next time I tried to commit changes to my repository, I got an error message something like the following:
svn: Checksum mismatch for '.svn/text-base/blah.ext';

expected: 'f8d45250f7df5561635854165862fdd8',

actual: '644f85c4befa671150c5c6ec5fad9885'
The above is actually taken straight from an article called “subversion checksum mismatch - easy workaround.” I’m glad I found the article because it helped me fix the problem. Contrary to the title of the blog post, however, I didn’t find Chris’s instructions all that clear, so I thought I’d take a shot at explaining it in a way that is maybe a little easier to follow.
A side trip down Background Lane
Feel free to skip this section  if you are familiar with how SVN works  or are just in a hurry to fix your issue and get on with life!
SVN is software that helps you track revisions to files. As such, it is very important for SVN to know when a file changes. SVN stores information about every change made to files under its control locally in plain text files inside hidden .svn  directories. Trust me, you don’t want to edit those files directly.
Before committing (saving) a file, SVN compares the latest revision of the file in the repository with the corresponding, locally saved, latest revision. Actually, it doesn’t compare the files directly. Instead, it compares the checksums. A checksum is a shortened hash that represents the contents of a file. If the checksum for a file changes, you know it has been altered.
Once you change a file, it’s really hard to get it back to its original state for the purposes of this check. Directly putting back the text that was changed didn’t work for me. I don’t know exactly how checksums are calculated, but it could be that they’re based on the contents of the file plus some meta-data (like the last modified date) or else I just missed some of the changes.
In any case, I was having a bugger of a time with this, until I discovered the above-linked article. Then, I was, to quote The Proclaimers, on my way from misery to happiness. Uh-huh. Uh-huh.
Enough, already! Show me how to fix it!
The process we will follow to restore the repo to a state where we can commit entails the following steps:
Check out the latest revision of the corrupted directory into a temporary directory
Delete the munged SVN revision files
Copy the correct SVN revision files into the working directory
As you can see, it’s not difficult. You just have to know where to look for the correct files to swap out.
A benefit of my way over other procedures I’ve seen described  is that I didn’t have to do anything special to get back to a state where I could commit the latest changes I had made. After doing the above, SVN told me I had changes to commit. I committed them, and I was done.
Ominous disclaimer:  what I am describing worked for me, for text files. It may not work for you. It should work for binary files, but I haven’t personally tried it. Following this procedure, you may lose your life’s work, putting you on an irreversible path to destitution and despair. You have been warned.
OK, now that you’re too scared out of your wits to try them, know that these steps have face validity  and worked in my case. If that’s enough assurance for you, let’s get this road on the show.
The following are the commands I used to restore my repo. The paths and filenames have been changed to protect the innocent. Also, I am describing the process for Mac OS X, so if you’re on a different operating system, make the proper adjustments.
Open Terminal.app or your command line interface of choice
Change to a directory that is not under version control. /tmp  works nicely:

$ cd /tmp

Checkout the latest revision of the corrupted directory:

$ svn co svn://me@myserver/path/to/directory

Change into the directory that holds the SVN revision files:

$ cd directory/.svn/text-base/

Open a second  terminal window and change into the directory with the corrupted revision files:

$ cd /path/to/working/directory/.svn/text-base/

At this point, if you were to list the contents of the text-base  directories in both windows, they should be identical and consist of a list something like the following:

$ ls -la

drwxr-xr-x 31 andrew andrew 1054 24 Jan 14:52 .
drwxr-xr-x 8 andrew andrew 272 25 Jan 15:50 ..
-r--r--r-- 1 andrew andrew 198 16 Nov 18:21 .project.svn-base
-r--r--r-- 1 andrew andrew 27 19 Dec 09:27 myTextFile.svn-base

In the second  window (the one with your working copy), delete the corrupted revision files. If you know which one(s) they are, just delete them. Otherwise, you can delete everything in this directory:

$ sudo rm *

(Note for the paranoid: you could backup this directory before performing this step if you want. I figured why bother since it’s corrupted already and I had a backup in the form of the newly checked out version in /tmp)
Back in the first  window, copy the contents of the text-base  directory into your working directory:

$ sudo cp * /path/to/working/directory/.svn/text-base/
That’s it. You should now be able to commit to your heart’s content.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值