Cam*_*oft 40 linux svn version-control
我有一个post-commit钩子脚本,当对存储库进行提交时,它执行工作副本的SVN更新.
当用户使用TortoiseSVN从他们的Windows机器提交存储库时,会出现以下错误:
post-commit hook failed (exit code 1) with output:
svn: Error converting entry in directory '/home/websites/devel/website/guides/Images' to UTF-8
svn: Can't convert string from native encoding to 'UTF-8':
svn: Teneriffa-S?\195?\188d.jpg
Run Code Online (Sandbox Code Playgroud)
上面讨论的文件是:Teneriffa-Süd.jpg
注意重音u.这是因为该网站是德语,文件拼写为德语.
在Linux命令行上对工作副本执行更新时,不会遇到任何错误.仅当通过Windows SVN客户端提交执行提交后挂钩时,才会出现上述错误.
问题:
更新:
事实证明,有问题的文件文件正确显示为Teneriffa-Süd.jpg
从Windows机器上查看(通过Samba),但是当我从Linux服务器(使用SSH和PuTTY)查看文件所在的文件名时,我得到了Teneriffa-Süd.jpg
小智 62
又一个例子:
$ svn update
svn: Error converting entry in directory '.' to UTF-8
svn: Can't convert string from native encoding to 'UTF-8':
$ export LC_CTYPE=en_US.UTF-8
$ svn update
Run Code Online (Sandbox Code Playgroud)
(...现在一切都很好)
Bah*_*bar 12
编辑添加:
啊.我误解了这些症状.svn服务器将所有内容存储在utf-8中(似乎它成功地完成了).
提交后挂钩是无法从UTF-8转换的位.如果我理解你说的正确,服务器上的post-commit钩子会触发对共享驱动器的svn更新(因此svn服务器启动一个svn客户端到它自己......)?这意味着需要修复的配置是服务器上客户端的配置.
检查执行svn服务器的环境中的LANG/LC_ALL..碰巧,钩子在真空环境中运行(见提示).所以你应该在钩子本身设置变量.
有关svn如何处理本地化的信息,另请参见此页面
如果错误是 -
[abc@288832-web3 public_html]$ svn update
svn: Error converting entry in directory 'images' to UTF-8
svn: Valid UTF-8 data
(hex: 46 65 6e 65 72 62 61 68)
followed by invalid UTF-8 sequence
(hex: e7 65 2b 46)
Run Code Online (Sandbox Code Playgroud)
然后这样做.
[abc@288832-web3 public_html]$ printf "\x46\x65\x6e\x65\x72\x62\x61\x68\n"
Fenerbah
Run Code Online (Sandbox Code Playgroud)
(这意味着系统在该文件夹中有一些以"Fenerbah"开头的文件名.)
[abc@288832-web3 public_html]$ cd images
[abc@288832-web3 images]$ rm -rf Fenerbahçe+Forma+2.jpg
Run Code Online (Sandbox Code Playgroud)
因此,您可以看到名称中有一个特殊字符,SVN不支持它.