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

当从visualstudio.com克隆或获取时,我收到一条边带消息“你正在使用旧版本的Git”。

使用自1月10日起的libgit2 commit f1323d9会发生这种情况。

对此有什么我可以做的,这是我应该担心的吗?

它可以用类似的东西复制

#include  #include  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 message); } return 0; } 

不 – 这里没什么值得担心的。 VSTS试图通过查看您正在运行的Git版本并建议您在运行过时的东西时进行升级来提供帮助。

libgit2 必须发送一个Git版本字符串作为其用户代理的一部分 ,假装是Git本身,因为一些托管服务提供商[1]对于查看用户代理[2]“过于热情”,如果他们没有看到一开始的git/前缀,将假设您是一个Web浏览器并将您重定向到他们的主页。

这与每个图形Web浏览器声称都是Mozilla方式大致相同。 😢

但是,在这种情况下,VSTS需要足够聪明才能识别出基于libgit2的客户端不应遵循与Git本身相同的匹配规则。

您无法在客户端中更改此行为。 您可以更改随请求一起发送的用户代理字符串,但libgit2将始终使用git/2.0前缀(以便从上述托管服务提供商处获得。)例如,如果您:

 git_libgit2_opts(GIT_OPT_SET_USER_AGENT, "MyAwesomeGitClient/32.14"); 

然后,实际的用户代理将被发送为:

 git/2.0 MyAwesomeGitClient/32.14 

但我不建议这样做,因为没有必要做任何改变。 很明显,VSTS在这里是不正确的,我会要求VSTS Git Server团队进行调查。


[1]不是Visual Studio Team Services。

[2]我说这个托管服务提供商“过于热情”,但这很有礼貌。 Git在获取和推送时会遇到特定的端点,并且它们不需要受到用户代理匹配的保护。 这种行为让我们无休止地破解无休止的黑客行为,就像所有假装成git/2.0 libgit2客户端和假装成Mozilla Safari一样。

我们应该做得更好。