SVN版本问题:This client is too old to work with working copy
2012-06-19 17:16
513 查看
【问题描述】:MyEclipse插件版本1.4,客户端TortoiseSVN 1.6.6,用客户端commit代码之后,无法在MyEclipse下对工程就行update等操作,提示错误信息:This client is too old to work with working copy '.'; please get a newer Subversion client
【问题分析】:网络一气搜集之后,发现问题所在:.svn目录,里面保存着svn需要的一些版本信息,用TortoiseSVN去操作,会在.svn里增加一些文件。如果TortoiseSVN的版本比插件版本要高,那么再回到低版本去工作,就会有兼容性错误,因为老的客户端无法识别那些。
【解决方法】:
方案1(未试验,理论可行):
在线更新安装插件
help->sofeware updates-> find and install
方案2(测试可行):
一、下载:change-svn-wc-format.py(见附件) ,这是一个Python做的script,所以需要先下载Python
注意:1)从目前来看,最好使用Python 2.6,如果是用最新的3.0版本会出现问题。 比如无法打开Script,出现异常等等。2)安装后在环境变量的path中追加python安装路径:"C:/Python26"
二、1)把change-svn-wc-format.py放入C盘根目录,运行-->cmd-->cd C:/
2)执行修改:
C:/>change-svn-wc-format.py E:/work/sadapter 1.4 --force
参数说明:第一个change-svn-wc-format.py是执行脚本,第二个E:/work/sadapter是工程路径,第三个1.4是要修改到的版本,第四个--force不是必须的,在执行失败的情况下可以加入此参数。
3)结果:一阵processing:
引用
……Checking whether WC format can be converted
Writing WC format
Converted WC at 'E:/work/sadapter' into format 8 for Subversion 1.4
再去MyEclipse下更新done:
引用
…… A E:/work/sadapter/src/main/resources/efs/sadapter/config/spring/order/orderContext.xml
D E:/work/sadapter/src/main/resources/efs/sadapter/config/spring/contract/custRouteContext.xml
D E:/work/sadapter/src/main/resources/efs/sadapter/config/spring/contract/custInfo.xml
D E:/work/sadapter/src/main/resources/efs/sadapter/config/spring/contract/custAcctContext.xml
U E:/work/sadapter/src/main/resources/efs/sadapter/config/spring/contract/contractContext.xml
U E:/work/sadapter/src/main/filter-resources/efs/sadapter/config/spring/applicationContext.xml
Updated to revision 1235.
===== File Statistics: =====
Deleted: 19
Added: 14
Updated: 17
change-svn-wc-format.rar (4.7 KB)
或者将下列代码保存成change-svn-wc-format.py文件,chmod +x change-svn-wc-format.py修改执行权限,直接执行:sudo ../change-svn-wc-format.py kernel_imx 1.5
【问题分析】:网络一气搜集之后,发现问题所在:.svn目录,里面保存着svn需要的一些版本信息,用TortoiseSVN去操作,会在.svn里增加一些文件。如果TortoiseSVN的版本比插件版本要高,那么再回到低版本去工作,就会有兼容性错误,因为老的客户端无法识别那些。
【解决方法】:
方案1(未试验,理论可行):
在线更新安装插件
help->sofeware updates-> find and install
方案2(测试可行):
一、下载:change-svn-wc-format.py(见附件) ,这是一个Python做的script,所以需要先下载Python
注意:1)从目前来看,最好使用Python 2.6,如果是用最新的3.0版本会出现问题。 比如无法打开Script,出现异常等等。2)安装后在环境变量的path中追加python安装路径:"C:/Python26"
二、1)把change-svn-wc-format.py放入C盘根目录,运行-->cmd-->cd C:/
2)执行修改:
C:/>change-svn-wc-format.py E:/work/sadapter 1.4 --force
参数说明:第一个change-svn-wc-format.py是执行脚本,第二个E:/work/sadapter是工程路径,第三个1.4是要修改到的版本,第四个--force不是必须的,在执行失败的情况下可以加入此参数。
3)结果:一阵processing:
引用
……Checking whether WC format can be converted
Writing WC format
Converted WC at 'E:/work/sadapter' into format 8 for Subversion 1.4
再去MyEclipse下更新done:
引用
…… A E:/work/sadapter/src/main/resources/efs/sadapter/config/spring/order/orderContext.xml
D E:/work/sadapter/src/main/resources/efs/sadapter/config/spring/contract/custRouteContext.xml
D E:/work/sadapter/src/main/resources/efs/sadapter/config/spring/contract/custInfo.xml
D E:/work/sadapter/src/main/resources/efs/sadapter/config/spring/contract/custAcctContext.xml
U E:/work/sadapter/src/main/resources/efs/sadapter/config/spring/contract/contractContext.xml
U E:/work/sadapter/src/main/filter-resources/efs/sadapter/config/spring/applicationContext.xml
Updated to revision 1235.
===== File Statistics: =====
Deleted: 19
Added: 14
Updated: 17
change-svn-wc-format.rar (4.7 KB)
或者将下列代码保存成change-svn-wc-format.py文件,chmod +x change-svn-wc-format.py修改执行权限,直接执行:sudo ../change-svn-wc-format.py kernel_imx 1.5
01.#!/usr/bin/env python 02.# 03.# change-svn-wc-format.py: Change the format of a Subversion working copy. 04.# 05.# ==================================================================== 06.# Licensed to the Apache Software Foundation (ASF) under one 07.# or more contributor license agreements. See the NOTICE file 08.# distributed with this work for additional information 09.# regarding copyright ownership. The ASF licenses this file 10.# to you under the Apache License, Version 2.0 (the 11.# "License"); you may not use this file except in compliance 12.# with the License. You may obtain a copy of the License at 13.# 14.# http://www.apache.org/licenses/LICENSE-2.0 15.# 16.# Unless required by applicable law or agreed to in writing, 17.# software distributed under the License is distributed on an 18.# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 19.# KIND, either express or implied. See the License for the 20.# specific language governing permissions and limitations 21.# under the License. 22.# ==================================================================== 23. 24.import sys 25.import os 26.import getopt 27.try: 28. my_getopt = getopt.gnu_getopt 29.except AttributeError: 30. my_getopt = getopt.getopt 31. 32.### The entries file parser in subversion/tests/cmdline/svntest/entry.py 33.### handles the XML-based WC entries file format used by Subversion 34.### 1.3 and lower. It could be rolled into this script. 35. 36.LATEST_FORMATS = { "1.4" : 8, 37. "1.5" : 9, 38. "1.6" : 10, 39. # Do NOT add format 11 here. See comment in must_retain_fields 40. # for why. 41. } 42. 43.def usage_and_exit(error_msg=None): 44. """Write usage information and exit. If ERROR_MSG is provide, that 45. error message is printed first (to stderr), the usage info goes to 46. stderr, and the script exits with a non-zero status. Otherwise, 47. usage info goes to stdout and the script exits with a zero status.""" 48. progname = os.path.basename(sys.argv[0]) 49. 50. stream = error_msg and sys.stderr or sys.stdout 51. if error_msg: 52. stream.write("ERROR: %s/n/n" % error_msg) 53. stream.write("""/ 54.usage: %s WC_PATH SVN_VERSION [--verbose] [--force] [--skip-unknown-format] 55. %s --help 56. 57.Change the format of a Subversion working copy to that of SVN_VERSION. 58. 59. --skip-unknown-format : skip directories with unknown working copy 60. format and continue the update 61. 62.""" % (progname, progname)) 63. stream.flush() 64. sys.exit(error_msg and 1 or 0) 65. 66.def get_adm_dir(): 67. """Return the name of Subversion's administrative directory, 68. adjusted for the SVN_ASP_DOT_NET_HACK environment variable. See 69. <http://svn.apache.org/repos/asf/subversion/trunk/notes/asp-dot-net-hack.txt> 70. for details.""" 71. return "SVN_ASP_DOT_NET_HACK" in os.environ and "_svn" or ".svn" 72. 73.class WCFormatConverter: 74. "Performs WC format conversions." 75. root_path = None 76. error_on_unrecognized = True 77. force = False 78. verbosity = 0 79. 80. def write_dir_format(self, format_nbr, dirname, paths): 81. """Attempt to write the WC format FORMAT_NBR to the entries file 82. for DIRNAME. Throws LossyConversionException when not in --force 83. mode, and unconvertable WC data is encountered.""" 84. 85. # Avoid iterating in unversioned directories. 86. if not (get_adm_dir() in paths): 87. del paths[:] 88. return 89. 90. # Process the entries file for this versioned directory. 91. if self.verbosity: 92. print("Processing directory '%s'" % dirname) 93. entries = Entries(os.path.join(dirname, get_adm_dir(), "entries")) 94. entries_parsed = True 95. if self.verbosity: 96. print("Parsing file '%s'" % entries.path) 97. try: 98. entries.parse(self.verbosity) 99. except UnrecognizedWCFormatException, e: 100. if self.error_on_unrecognized: 101. raise 102. sys.stderr.write("%s, skipping/n" % e) 103. sys.stderr.flush() 104. entries_parsed = False 105. 106. if entries_parsed: 107. format = Format(os.path.join(dirname, get_adm_dir(), "format")) 108. if self.verbosity: 109. print("Updating file '%s'" % format.path) 110. format.write_format(format_nbr, self.verbosity) 111. else: 112. if self.verbosity: 113. print("Skipping file '%s'" % format.path) 114. 115. if self.verbosity: 116. print("Checking whether WC format can be converted") 117. try: 118. entries.assert_valid_format(format_nbr, self.verbosity) 119. except LossyConversionException, e: 120. # In --force mode, ignore complaints about lossy conversion. 121. if self.force: 122. print("WARNING: WC format conversion will be lossy. Dropping "/ 123. "field(s) %s " % ", ".join(e.lossy_fields)) 124. else: 125. raise 126. 127. if self.verbosity: 128. print("Writing WC format") 129. entries.write_format(format_nbr) 130. 131. def change_wc_format(self, format_nbr): 132. """Walk all paths in a WC tree, and change their format to 133. FORMAT_NBR. Throw LossyConversionException or NotImplementedError 134. if the WC format should not be converted, or is unrecognized.""" 135. for dirpath, dirs, files in os.walk(self.root_path): 136. self.write_dir_format(format_nbr, dirpath, dirs + files) 137. 138.class Entries: 139. """Represents a .svn/entries file. 140. 141. 'The entries file' section in subversion/libsvn_wc/README is a 142. useful reference.""" 143. 144. # The name and index of each field composing an entry's record. 145. entry_fields = ( 146. "name", 147. "kind", 148. "revision", 149. "url", 150. "repos", 151. "schedule", 152. "text-time", 153. "checksum", 154. "committed-date", 155. "committed-rev", 156. "last-author", 157. "has-props", 158. "has-prop-mods", 159. "cachable-props", 160. "present-props", 161. "conflict-old", 162. "conflict-new", 163. "conflict-wrk", 164. "prop-reject-file", 165. "copied", 166. "copyfrom-url", 167. "copyfrom-rev", 168. "deleted", 169. "absent", 170. "incomplete", 171. "uuid", 172. "lock-token", 173. "lock-owner", 174. "lock-comment", 175. "lock-creation-date", 176. "changelist", 177. "keep-local", 178. "working-size", 179. "depth", 180. "tree-conflicts", 181. "file-external", 182. ) 183. 184. # The format number. 185. format_nbr = -1 186. 187. # How many bytes the format number takes in the file. (The format number 188. # may have leading zeroes after using this script to convert format 10 to 189. # format 9 -- which would write the format number as '09'.) 190. format_nbr_bytes = -1 191. 192. def __init__(self, path): 193. self.path = path 194. self.entries = [] 195. 196. def parse(self, verbosity=0): 197. """Parse the entries file. Throw NotImplementedError if the WC 198. format is unrecognized.""" 199. 200. input = open(self.path, "r") 201. 202. # Read WC format number from INPUT. Validate that it 203. # is a supported format for conversion. 204. format_line = input.readline() 205. try: 206. self.format_nbr = int(format_line) 207. self.format_nbr_bytes = len(format_line.rstrip()) # remove '/n' 208. except ValueError: 209. self.format_nbr = -1 210. self.format_nbr_bytes = -1 211. if not self.format_nbr in LATEST_FORMATS.values(): 212. raise UnrecognizedWCFormatException(self.format_nbr, self.path) 213. 214. # Parse file into individual entries, to later inspect for 215. # non-convertable data. 216. entry = None 217. while True: 218. entry = self.parse_entry(input, verbosity) 219. if entry is None: 220. break 221. self.entries.append(entry) 222. 223. input.close() 224. 225. def assert_valid_format(self, format_nbr, verbosity=0): 226. if verbosity >= 2: 227. print("Validating format for entries file '%s'" % self.path) 228. for entry in self.entries: 229. if verbosity >= 3: 230. print("Validating format for entry '%s'" % entry.get_name()) 231. try: 232. entry.assert_valid_format(format_nbr) 233. except LossyConversionException: 234. if verbosity >= 3: 235. sys.stderr.write("Offending entry:/n%s/n" % entry) 236. sys.stderr.flush() 237. raise 238. 239. def parse_entry(self, input, verbosity=0): 240. "Read an individual entry from INPUT stream." 241. entry = None 242. 243. while True: 244. line = input.readline() 245. if line in ("", "/x0c/n"): 246. # EOF or end of entry terminator encountered. 247. break 248. 249. if entry is None: 250. entry = Entry() 251. 252. # Retain the field value, ditching its field terminator ("/x0a"). 253. entry.fields.append(line[:-1]) 254. 255. if entry is not None and verbosity >= 3: 256. sys.stdout.write(str(entry)) 257. print("-" * 76) 258. return entry 259. 260. def write_format(self, format_nbr): 261. # Overwrite all bytes of the format number (which are the first bytes in 262. # the file). Overwrite format '10' by format '09', which will be converted 263. # to '9' by Subversion when it rewrites the file. (Subversion 1.4 and later 264. # ignore leading zeroes in the format number.) 265. assert len(str(format_nbr)) <= self.format_nbr_bytes 266. format_string = '%0' + str(self.format_nbr_bytes) + 'd' 267. 268. os.chmod(self.path, 0600) 269. output = open(self.path, "r+", 0) 270. output.write(format_string % format_nbr) 271. output.close() 272. os.chmod(self.path, 0400) 273. 274.class Entry: 275. "Describes an entry in a WC." 276. 277. # Maps format numbers to indices of fields within an entry's record that must 278. # be retained when downgrading to that format. 279. must_retain_fields = { 280. # Not in 1.4: changelist, keep-local, depth, tree-conflicts, file-externals 281. 8 : (30, 31, 33, 34, 35), 282. # Not in 1.5: tree-conflicts, file-externals 283. 9 : (34, 35), 284. 10 : (), 285. # Downgrading from format 11 (1.7-dev) to format 10 is not possible, 286. # because 11 does not use has-props and cachable-props (but 10 does). 287. # Naively downgrading in that situation causes properties to disappear 288. # from the wc. 289. # 290. # Downgrading from the 1.7 SQLite-based format to format 10 is not 291. # implemented. 292. } 293. 294. def __init__(self): 295. self.fields = [] 296. 297. def assert_valid_format(self, format_nbr): 298. "Assure that conversion will be non-lossy by examining fields." 299. 300. # Check whether lossy conversion is being attempted. 301. lossy_fields = [] 302. for field_index in self.must_retain_fields[format_nbr]: 303. if len(self.fields) - 1 >= field_index and self.fields[field_index]: 304. lossy_fields.append(Entries.entry_fields[field_index]) 305. if lossy_fields: 306. raise LossyConversionException(lossy_fields, 307. "Lossy WC format conversion requested for entry '%s'/n" 308. "Data for the following field(s) is unsupported by older versions " 309. "of/nSubversion, and is likely to be subsequently discarded, and/or " 310. "have/nunexpected side-effects: %s/n/n" 311. "WC format conversion was cancelled, use the --force option to " 312. "override/nthe default behavior." 313. % (self.get_name(), ", ".join(lossy_fields))) 314. 315. def get_name(self): 316. "Return the name of this entry." 317. return len(self.fields) > 0 and self.fields[0] or "" 318. 319. def __str__(self): 320. "Return all fields from this entry as a multi-line string." 321. rep = "" 322. for i in range(0, len(self.fields)): 323. rep += "[%s] %s/n" % (Entries.entry_fields[i], self.fields[i]) 324. return rep 325. 326.class Format: 327. """Represents a .svn/format file.""" 328. 329. def __init__(self, path): 330. self.path = path 331. 332. def write_format(self, format_nbr, verbosity=0): 333. format_string = '%d/n' 334. if os.path.exists(self.path): 335. if verbosity >= 1: 336. print("%s will be updated." % self.path) 337. os.chmod(self.path,0600) 338. else: 339. if verbosity >= 1: 340. print("%s does not exist, creating it." % self.path) 341. format = open(self.path, "w") 342. format.write(format_string % format_nbr) 343. format.close() 344. os.chmod(self.path, 0400) 345. 346.class LocalException(Exception): 347. """Root of local exception class hierarchy.""" 348. pass 349. 350.class LossyConversionException(LocalException): 351. "Exception thrown when a lossy WC format conversion is requested." 352. def __init__(self, lossy_fields, str): 353. self.lossy_fields = lossy_fields 354. self.str = str 355. def __str__(self): 356. return self.str 357. 358.class UnrecognizedWCFormatException(LocalException): 359. def __init__(self, format, path): 360. self.format = format 361. self.path = path 362. def __str__(self): 363. return ("Unrecognized WC format %d in '%s'; " 364. "only formats 8, 9, and 10 can be supported") % (self.format, self.path) 365. 366. 367.def main(): 368. try: 369. opts, args = my_getopt(sys.argv[1:], "vh?", 370. ["debug", "force", "skip-unknown-format", 371. "verbose", "help"]) 372. except: 373. usage_and_exit("Unable to process arguments/options") 374. 375. converter = WCFormatConverter() 376. 377. # Process arguments. 378. if len(args) == 2: 379. converter.root_path = args[0] 380. svn_version = args[1] 381. else: 382. usage_and_exit() 383. 384. # Process options. 385. debug = False 386. for opt, value in opts: 387. if opt in ("--help", "-h", "-?"): 388. usage_and_exit() 389. elif opt == "--force": 390. converter.force = True 391. elif opt == "--skip-unknown-format": 392. converter.error_on_unrecognized = False 393. elif opt in ("--verbose", "-v"): 394. converter.verbosity += 1 395. elif opt == "--debug": 396. debug = True 397. else: 398. usage_and_exit("Unknown option '%s'" % opt) 399. 400. try: 401. new_format_nbr = LATEST_FORMATS[svn_version] 402. except KeyError: 403. usage_and_exit("Unsupported version number '%s'; " 404. "only 1.4, 1.5, and 1.6 can be supported" % svn_version) 405. 406. try: 407. converter.change_wc_format(new_format_nbr) 408. except LocalException, e: 409. if debug: 410. raise 411. sys.stderr.write("%s/n" % e) 412. sys.stderr.flush() 413. sys.exit(1) 414. 415. print("Converted WC at '%s' into format %d for Subversion %s" % / 416. (converter.root_path, new_format_nbr, svn_version)) 417. 418.if __name__ == "__main__": 419. main()
相关文章推荐
- SVN版本问题:svn: E155021: This client is too old to work with the working copy at
- SVN版本问题:svn: E155021: This client is too old to work with the working copy at
- SVN版本问题:This client is too old to work with working copy
- SVN版本问题:svn: E155021: This client is too old to work with the working copy at
- SVN版本问题:This client is too old to work with working copy 【解决】
- SVN版本问题:This client is too old to work with working copy
- 今天就碰到这个问题。 (转) svn: This client is too old to work with working copy..
- SVN This client is too old to work with working copy的问题
- Myecllpse SVN 插件svn: This client is too old to work with working copy
- SVN:This client is too old to work with working copy…解决的方法
- SVN:This client is too old to work with working copy…解决办法
- 在使用svn时,This client is too old to work with working copy...; please get a newer Subversion client.错误
- svn同步报错—— This client is too old to work with working copy
- SVN:This client is too old to work with working copy…解决方法
- this client is too old to work with working? SVN上遇到的这个问题的原因
- SVN 出现This client is too old to work with working copy...错误
- SVN:This client is too old to work with working copy…解决方法
- [转]SVN:This client is too old to work with working copy 的解决方案
- 转:SVN 出现This client is too old to work with working copy...错误
- Windows下升级SVN后,Ubuntu下svn命令报错—svn: E155021: This client is too old to work with the working copy at