visualstudio.com认为最新的libgit2已经过时了

时间:2018-01-17 08:40:12

标签: c libgit2

从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;
}

1 个答案:

答案 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一样。

我们应该做得更好。