从visualstudio.com克隆或获取时,我收到一条边带消息“你正在使用旧版本的Git”。
自1月10日起,libgit2 commit f1323d9会发生这种情况。
我能做些什么吗?这是我应该担心的吗?
可以使用类似
的内容进行复制#include <stdio.h>
#include <git2.h>
static int cred_acquire_cb(git_cred **cred, const char *url,
const char *username_from_url,
unsigned int allowed_types, void *payload) {
return git_cred_userpass_plaintext_new(cred, "email@address.com", "token");
}
static int sideband_progress_cb(const char *str, int len, void *payload) {
printf("%s", str);
return 0;
}
int main() {
git_libgit2_init();
git_clone_options clone_options = GIT_CLONE_OPTIONS_INIT;
clone_options.fetch_opts.callbacks.credentials = cred_acquire_cb;
clone_options.fetch_opts.callbacks.sideband_progress = sideband_progress_cb;
git_repository *repo = NULL;
const char *url = "https://account.visualstudio.com/project/_git/repo";
const char *path = "repo";
int error = git_clone(&repo, url, path, &clone_options);
if(error < 0) {
fprintf(stderr, "error = %d, %s\n", error, giterr_last()->message);
}
return 0;
}
答案 0 :(得分:2)
不 - 这里没什么值得担心的。 VSTS试图通过查看您正在运行的Git版本并建议您在运行过时的东西时进行升级来提供帮助。
libgit2 has to send a Git version string as part of its user agent,假装是Git本身,因为一些托管服务提供商[1]对于查看用户代理[2]并且他们没有看到git/
“过于热情”在开头的前缀,将假定您是一个Web浏览器并将您重定向到他们的主页。
这与每个图形网络浏览器声称为Mozilla
的方式大致相同。
在这种情况下,VSTS需要足够聪明才能识别出基于libgit2的客户端不应遵循与Git本身相同的匹配规则。
您无法在客户端中更改此行为。您可以更改随请求一起发送的用户代理字符串,但libgit2将始终以git/2.0
作为前缀(以便从上述托管服务提供商处获得。)例如,如果您:< / p>
git_libgit2_opts(GIT_OPT_SET_USER_AGENT, "MyAwesomeGitClient/32.14");
然后,实际的用户代理将发送为:
git/2.0 MyAwesomeGitClient/32.14
但我不推荐这个,因为没有必要做任何改变。很明显,VSTS在这里是不正确的,我会要求VSTS Git服务器团队进行调查。
[1]不是Visual Studio Team Services。
[2]我说这个托管服务提供商“过于热情”,但这很有礼貌。 Git在获取和推送时会遇到特定的端点,并且它们不需要受到用户代理匹配的保护。这种行为让我们无休止地破解无聊的行为,就像假装git/2.0
的所有libgit2客户端和假装Mozilla
的Safari一样。
我们应该做得更好。