Can’t convert string from native encoding to ‘UTF-8’

问题: 执行命令svn status 出现提示下面提示信息

svn: E000022: Error converting entry in directory '/wwwroot/test_ks/Application/M/View/default/Ac' to UTF-8
svn: E000022: Can't convert string from native encoding to 'UTF-8':
svn: E000022: lists - ?\229?\137?\175?\230?\156?\172.html

描述: 之前是没有问题的可以操作都是正常, 不知道什么原因突然就出现这个问题. 导致服务器上的svn库无法update等操作.

通过操作su切换到超级用户的时候显示正常, 然后再重新切换回普遍用户这个时候svn操作命令则都正常.但是用普通用户重新连接则又不正常了.

连接第二台服务器, 则无这个问题.


解决: export LC_ALL= (普遍用户执行命令)把变量重置为空 这样也可以无需编辑其他的任何文件重新连接也生效

设置后-使用命令 locale查看

LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=

设置前(有问题时状态)-使用命令 locale查看

LANG=en_US.UTF-8
LC_CTYPE="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_COLLATE="C"
LC_MONETARY="C"
LC_MESSAGES="C"
LC_PAPER="C"
LC_NAME="C"
LC_ADDRESS="C"
LC_TELEPHONE="C"
LC_MEASUREMENT="C"
LC_IDENTIFICATION="C"
LC_ALL=C

svn一个用户怎么可以有多个库的权限

配置passwd和authz

vi passwd 输入如下内容:

[users]
user1=pwd1
user2=pwd2
user3=pwd3
user4=pwd4
user5=pwd5

保存退出(格式是 用户名=密码,不需要在系统设立相应帐号,密码是明文,注意安全)

vi authz 输入如下内容:

[groups]
admin=user1,user2
proj1=user3,user4
proj2=user5,user3
[/]
*=
@admin=rw
[proj1:/]
@proj1=rw
[proj2:/]
@proj2=rw

保存退出(这样,匿名用户*不允许读写,admin组里的可以读写任意项目,user3,user4可以读写proj1,user3,user5可以读写proj2,可以按照项目实际情况在这个文件里分配读写权限,也可以直接使用用户名分配权限而不一定需要使用组)

vi svnserve.conf

输入如下内容或者取消如下内容前面的注释:

anon-access = none #匿名用户不可读
auth-access = write #授权用户可写
password-db = ../../conf/passwd #使用哪个文件作为账号文件
authz-db = ../../conf/authz #使用哪个文件作为权限文件
realm = proj1 #注意在 proj2 项目中这里需要设置为 proj2

相关资料

SVN多项目多级目录的配置与管理

svn本地开发与tags修复

svn仓库

|—project
|—|—trunk
|—|—|—app1
|—|—branches
|—|—|—dev1
|—|—|—|—app1
|—|—|—|—1.0
|—|—tags
|—|—|—1.0

本地开发目录

|—~/wwroot
|—|—app1 已经配置nginx的目录.

那么app1是开发工作区,那么现在app1在为2.0本地开发中, 那么这个时候1.0突然有问题急需要修复. 怎么样可以把app1这个工作区的切换到1.0上?

可以想到的方式

  1. svn switch

svn switch 但是切换后会和当前工作区的代码合并. 

  1. 在本地在建立目录配置nginx

但是这种方法感觉好麻烦, 还是想是在方式1上的可以直接把项目切换到1.0分支上修复, 这样就可以不用重新配置nginx

svn目录划分

├── branches
│   ├── mjw
│   │   ├── ks
│   │   │   └── readme.md
│   │   └── ks_1.1.0_beta
│   │       └── readme.md
│   └── test
│       └── ks
│           └── readme.md
├── doc
├── tags
│   └── ks_1.1.0_beta
│       └── readme.md
└── trunk
    ├── api
    ├── ks
    │   └── readme.md
    └── tpl
  • trunk 主干
  • branches 分支
  • tags 标记(快照-只读)
  • doc 项目相关文档

trunk 存放相对稳定代码, 分支代码先由开发者初步测试后然后提交合并. 再由此主干发布tags.
branches 存放各个开发者的代码. 每个开发者除了自身开发代码, 还有一些由tags发布后产生的BUG 再回到此修复后提交到主干再发布.
tags 存放已发布的代码. 此目录的代码不可修改. 只可读.

图片来源: http://t.cn/RSvRBdl

查阅资料

SVN trunk(主线) branch(分支) tag(标记) 用法详解和详细操作步骤
SVN介绍及Linux下SVN命令收录

svn

SVN服务端搭建与配置

常用命令

本地初始化项目, 导入到线上库

svn import /Users/dtg/Desktop/testSVN svn://localhost/code/abc--username=test1 --password=test1 -m "初始化项目”

使用svn add的–force递归到版本化的目录下

svn add * --force

忽略项目的.git文件夹

右键 –> TortoiseSVN –> 设置 –> 常规设置 –> 在如下输入框中添加 详细教程

svn使用记录

svn

中文手册 | Englis

env: svnserve, version 1.9.3 (r1718519)

svn有两种协议svn与http. 基于svnserve的,默认端口为3690, 基于Apache的, 默认端口为Apache的默认端口80.

tip: svnserve更改auth文件是即时生效的, 无需重启服务.

服务端配置

  • authz 设置用户或组对项目各目录的权限
  • passwd 设置用户与密码
  • svnserve.conf 服务主配置文件

auth配置

[group]
admin = aaa,bbb,ccc
vip = a1
man = b1
custom = c1   //这里先设定有这么多个角色和用户
        //假设库的名字叫cp
        //下面在cp下建立2个平行的目录vip和main
[/]
@admin=rw     //表示根目录下只有admin才有读写权限  
[cp:/]
*=r         //在cp库下,除了admin下,所有人都有读的权限
@admin=rw    //在cp库下,admin具有读写的权限
[cp:/vip] 
*=        //除了vip和admin之外,所有人没有任何权限
@vip=rw       //
@admin=rw        //
[cp:/main]
*=         //除了以下角色外,其他人没有任何权限
@admin=rw    //
@vip=rw    //
@man=r        //

tip: 如果上一级用户拥有权限但是没有拥有特定的这个权限的话, 是看不到的该文件夹的. 或者说, 拥有子目录权限但是没有主目录权限的话, 可以直接通过完全的子目录链接来达到访问的目的.

auth配置

客户端配置

rm ~/.subversion/auth/svn.simple/* 删除当前账户的所有旧svn密码记录 更多

界面操作

svn重命名

  1. 选中文件或者文件夹—右键—TortoiseSVN—改名。
  2. svn 提交

命令操作

svn add . --force 添加新文件及修改文件. tip: 通常情况下,命令svn add *会忽略所有已经在版本控制之下的目录,有时候,你会希望添加所有工作拷贝的未版本化文件,包括那些隐藏在深处的文件,可以使用svn add的–force递归到版本化的目录下. 更多 svn add * --force

svn add --non-recursive otherdir 只添加一个目录而不包括其内容 svn命令行忽略文件及文件夹

svn copy http://svn.example.com/project/trunk http://svn.example.com/project/branches/1.0 -m "Release 1.0" svn创建branches、tags命令 更多
svn rm http://svn.example.com/project/branches/1.0 -m "误创建" 删除branches, tags

svn switch svn://xx.com/repo/branches/TRY-something 把工作目录转到分支 tip: 切换之间要有关系 如 trunk branches之间可以切换 branches/ks branches/ks_1.0.1_beta之间不可以切换 错误信息: Path '.' does not share common version control ancestry with the requested switch location

cd br_feature001 svn merge http://svn_server/xxx_repository/trunk 合并主干上的最新代码到分支上 分支每次开发前要执行的命令. hook自动合并可否?

svn delete [文件] 删除文件

svn log -l 5 查看最后五条log 更多
svn ls svn://svn.example.com/tags 查看版本库的文件 ls -> log 可查看日志

撤销操作

svn revert --recursive example_folder 撤销svn add 

svn update -r [188-版本号]


svn: E220001: 遇到不可读的路径;拒绝访问.(SVN Error: Unreadable path encountered; access denied;)

在项目的conf/svnserve.conf 中, 设置 anon-access = none 即可. 然后重启Subversion 服务. tip: 如果本地SVN客户端查看过日志会有缓存, 需要在 设置->日志缓存->缓存的版本库 中删除有问题的版本缓存 再重新查看日志就好了. svn: E220001: 遇到不可读的路径,拒绝访问

当树冲突时 如错误提示出现

svn: E155015: 提交失败(细节如下):
svn: E155015: 提交终止: “/home/wwwroot/xxxxxx/Runtime/Cache” 处于冲突状态

svn resolved <文件名/文件夹名字 >

root@futongdai:~# cd /home/wwwroot/newcrm.ofim.com/
root@futongdai:/home/wwwroot/newcrm.ofim.com# svn up
正在升级 '.':
已跳过 'Admin/*****.php' -- 节点处于冲突状态
版本 1312。
冲突概要:
跳过的路径:1

解决方法

step1
root@futongdai:/home/wwwroot/newcrm.ofim.com# svn resolve --accept working Admin/*****.php
“Admin/*****.php”的冲突状态已解决
step2
root@futongdai:/home/wwwroot/newcrm.ofim.com# svn revert Admin/*****.php        
已恢复“Admin/*****.php”

svn 恢复 如果你 svn add * 后想取消 命令 svn revert * 或 svn revert * --depth infinity

查阅资料

SVN介绍及Linux下SVN命令收录
svn命令行创建和删除分支和tags 创建分支与合并, 写的很详细.

svn 回退/更新/取消至某个版本命令详解