>>No.63059913
您提供的链接是GitHub上的一个issue,标题为"Cargo becomes unusable if gitconfig is malformed",即如果git配置文件损坏,Cargo将变得不可用。以下是该issue页面的主要内容概述:
1. **问题描述**:Cargo调用git(通过libgit2库),git会自动解析配置文件。Cargo本身不需要直接从配置文件中获取任何内容,但目前不清楚是否能够绕过配置解析。
2. **Cargo与Git的关系**:Cargo依赖于Git/libgit2正常工作,即Cargo期望Git/libgit2的行为不受git配置的影响。
3. **环境变量解决方案**:Git有`GIT_CONFIG_GLOBAL`和`GIT_CONFIG_SYSTEM`环境变量,如果设置为`/dev/null`,则相应的配置文件将被跳过。但libgit2似乎不遵循这些环境变量。不过,可以直接配置libgit2的查找位置,通过以下代码示例:
```c
git_libgit2_init();
git_libgit2_opts(GIT_OPT_SET_SEARCH_PATH, GIT_CONFIG_LEVEL_SYSTEM, "");
git_libgit2_opts(GIT_OPT_SET_SEARCH_PATH, GIT_CONFIG_LEVEL_GLOBAL, "");
git_libgit2_opts(GIT_OPT_SET_SEARCH_PATH, GIT_CONFIG_LEVEL_XDG, "");
git_libgit2_opts(GIT_OPT_SET_SEARCH_PATH, GIT_CONFIG_LEVEL_PROGRAMDATA, "");
// git_repository_init(...);
```
使用`NULL`代替`""`将重置为默认位置,这不是我们想要的。
4. **Git配置的期望行为**:Git自动尊重用户的配置,这是git的约定之一。但有人提出,它不应该这样做。
5. **类比说明**:将libgit2比作shell,Cargo使用它来执行脚本。Cargo期望shell解释器的行为与用户配置无关,例如`?`通配符应该正常工作,不应出错,别名不应展开等。
6. **实际问题**:默认情况下,shell不会为非交互式shell加载用户的配置,因为那会破坏许多脚本。这与Cargo和libgit2的情况相同:如果Cargo从`github.com`获取信息,它期望联系的是`github.com`,而不是用户通过`url` gitconfig变量重写的其他域名。
7. **讨论**:讨论中还提到了其他一些观点和类比,但主要焦点是如何处理git配置文件损坏导致Cargo不可用的问题。