1

私はrepo-1.19を使用します:

$ wget -nv 'http://code.google.com/p/git-repo/downloads/detail?name=repo-1.19'
2013-08-05 02:36:32 URL:http://code.google.com/p/git-repo/downloads/detail?name=repo-1.19 [9673] -> "detail?name=repo-1.19.3" [1]
$ chmod +x repo-1.19 
$ ./repo-1.19 --version
repo version v1.12.2
       (from https://gerrit.googlesource.com/git-repo)
repo launcher version 1.19
       (from /home/u/Téléchargements/repo-1.19)
git version 1.8.1.2
Python 2.7.4 (default, Jul  5 2013, 08:21:57) 
[GCC 4.7.3]

しかし、初期化しようとすると、Python UnicodeDecodeError が発生します。

$ rm -rf .repo
$ ./repo-1.19 init -u git://github.com/CyanogenMod/android.git -b cm-10.2
Get https://gerrit.googlesource.com/git-repo
remote: Counting objects: 101, done
remote: Finding sources: 100% (101/101)
remote: Total 2533 (delta 1442), reused 2533 (delta 1442)
Receiving objects: 100% (2533/2533), 1.71 MiB | 1.80 MiB/s, done.
Resolving deltas: 100% (1442/1442), done.
From https://gerrit.googlesource.com/git-repo
 * [new branch]      maint      -> origin/maint
 * [new branch]      master     -> origin/master
 * [new branch]      stable     -> origin/stable
 * [new tag]         v1.0       -> v1.0
 [... lines removed ...]
 * [new tag]         v1.9.6     -> v1.9.6
Get git://github.com/CyanogenMod/android.git
Traceback (most recent call last):
  File "/home/u/Téléchargements/.repo/repo/main.py", line 414, in <module>
    _Main(sys.argv[1:])
  File "/home/u/Téléchargements/.repo/repo/main.py", line 390, in _Main
    result = repo._Run(argv) or 0
  File "/home/u/Téléchargements/.repo/repo/main.py", line 138, in _Run
    result = cmd.Execute(copts, cargs)
  File "/home/u/Téléchargements/.repo/repo/subcmds/init.py", line 347, in Execute
    self._SyncManifest(opt)
  File "/home/u/Téléchargements/.repo/repo/subcmds/init.py", line 137, in _SyncManifest
    m._InitGitDir()
  File "/home/u/Téléchargements/.repo/repo/project.py", line 1847, in _InitGitDir
    self.bare_git.init()
  File "/home/u/Téléchargements/.repo/repo/project.py", line 2197, in runner
    capture_stderr = True)
  File "/home/u/Téléchargements/.repo/repo/git_command.py", line 167, in __init__
    _setenv(env, GIT_DIR, gitdir)
  File "/home/u/Téléchargements/.repo/repo/git_command.py", line 120, in _setenv
    env[name] = value.encode()
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 9: ordinal not in range(128)

私は次のアドバイスに従いました。

私は多くの可能性を試しましたが、成功しませんでした:

./repo-1.19 init -u   git://android.git.kernel.org/platform/manifest.git -b android-4.3_r2
./repo-1.19 init -u https://android.git.kernel.org/platform/manifest.git -b android-4.3_r2
./repo-1.19 init -u git://android.googlesource.com/platform/manifest

私の間違いはどこですか?

4

2 に答える 2

6

エラーは、使用しているパスを参照しています:

  File "/home/u/Téléchargements/.repo/repo/git_command.py", line 120, in _setenv
    env[name] = value.encode()
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 9: ordinal not in range(128)

0xc3 in position 9の「é」です/home/u/Téléchargements。これは のバグのように思えrepoますが、ASCII 文字のみのディレクトリ名を使用することで回避できる可能性が非常に高くなります。

git_command.py

def _setenv(env, name, value):
  env[name] = value.encode()

Python 2 では、値を US-ASCII としてエンコードしようとしますが、失敗します。おそらく次のようになります。

def _setenv(env, name, value):
  env[name] = value.encode(sys.getfilesystemencoding())

( Python で stdout をパイプするときの正しいエンコーディングの設定も参照してください)。

于 2013-08-05T11:49:28.440 に答える
2

この問題は2018年現在も存在しています。

受け入れられた回答は問題ありませんが、提案された修正 (sys.getfilesystemencoding()) が機能しないことを追加したいと思います。

関数を渡すには_setenv()、まず文字列を正しいエンコーディング (私の場合は UTF-8) でデコードする必要があります。

env[name] = value.decode('UTF-8')

しかし、その後、他のエラーで立ち往生しています。前述のようにデコードすると、他のコード ブロックがそれを ascii として扱い、そのようにデコードしようとするため、同じ種類のエラーがスローされます。

File "/path/to/repo/.repo/repo/git_command.py", line 238, in __init__
raise GitError('%s: %s' % (command[1], e))
error.GitError: init: 'ascii' codec can't encode character u'\xe9' in position 14: ordinal not in range(128)

エラーを無視するか、エラー文字を置き換えて、ASCII でエンコードしようとすると、エンコードは「機能」しますが、ファイルパスが間違っているため、別のエラーが発生します。

error.GitError: manifests init: fatal: Could not switch to '/path/to/rpo/.repo/': No such file or directory

したがって、有効な解決策は、ファイル パスを "ASCII デコード可能" (アクセント記号や英語以外の文字を使用しない) にすることだけです。

于 2018-07-18T19:45:52.997 に答える