【问题标题】:Git fetch hangsGit 抓取挂起
【发布时间】:2016-05-31 10:36:41
【问题描述】:

我有 git 存储库的工作副本(不是裸存储库)。我还设置了本地 jenkins,我的工作指向这个 repo。一切正常。我想我昨天更新了詹金斯,今天早上我发现我的工作开始失败了。因为他们无法从我的仓库中获取源代码(它会超时)。

于是我开始调查。我决定在终端中重复 git 命令行以检查是否可以报告问题。这是我正在做的事情:

git config remote.origin.url file:///Users/eugenmartynov/Development/source/company/app-android
git fetch origin

然后挂起。而且我不知道还要检查什么。

我有 git 版本 2.8.3。但这没关系,因为我在使用 Xcode 工具的默认版本时看到了相同的行为

如果我尝试打开 git trace 日志记录,这就是我看到的:

git fetch origin
14:25:53.549772 git.c:350               trace: built-in: git 'fetch' 'origin'
14:25:53.553987 run-command.c:336       trace: run_command: 'git-upload-pack '\''/Users/eugenmartynov/Development/source/company/app-android/.git'\'''
14:25:53.554490 run-command.c:195       trace: exec: '/bin/sh' '-c' 'git-upload-pack '\''/Users/eugenmartynov/Development/source/company/app-android/.git'\''' 'git-upload-pack '\''/Users/eugenmartynov/Development/source/company/app-android/.git'\'''
14:25:53.570196 run-command.c:336       trace: run_command: 'rev-list' '--objects' '--stdin' '--not' '--all' '--quiet'

这是过去成功工作的日志:

Started by an SCM change
Building in workspace /Users/eugenmartynov/.jenkins/workspace/android-feature-lov-563-general-cards
 > git rev-parse --is-inside-work-tree # timeout=10
Fetching changes from the remote Git repository
 > git config remote.origin.url file:///Users/eugenmartynov/Development/source/company/app-android/.git # timeout=10
Fetching upstream changes from file:///Users/eugenmartynov/Development/source/company/app-android/.git
 > git --version # timeout=10
 > git -c core.askpass=true fetch --tags --progress file:///Users/eugenmartynov/Development/source/company/app-android/.git +refs/heads/*:refs/remotes/origin/*
 > git rev-parse refs/remotes/origin/feature/lov-563-general-cards^{commit} # timeout=10
 > git rev-parse refs/remotes/origin/origin/feature/lov-563-general-cards^{commit} # timeout=10
Checking out Revision 932fc80699e765c1854c52051e0605698196d707 (refs/remotes/origin/feature/lov-563-general-cards)
 > git config core.sparsecheckout # timeout=10
 > git checkout -f 932fc80699e765c1854c52051e0605698196d707
 > git rev-list d35e0f1cee060b91366840296efc08854a8257b0 # timeout=10
 ....

这是第一个失败作业的日志:

Started by an SCM change
Building in workspace /Users/eugenmartynov/.jenkins/workspace/android-feature-lov-563-general-cards
 > git rev-parse --is-inside-work-tree # timeout=10
Fetching changes from the remote Git repository
 > git config remote.origin.url file:///Users/eugenmartynov/Development/source/company/app-android/.git # timeout=10
Fetching upstream changes from file:///Users/eugenmartynov/Development/source/company/app-android/.git
 > git --version # timeout=10
 > git -c core.askpass=true fetch --tags --progress file:///Users/eugenmartynov/Development/source/company/app-android/.git +refs/heads/*:refs/remotes/origin/*
ERROR: Timeout after 10 minutes
ERROR: Error fetching remote repo 'origin'
hudson.plugins.git.GitException: Failed to fetch from file:///Users/eugenmartynov/Development/source/company/app-android/.git
    at hudson.plugins.git.GitSCM.fetchFrom(GitSCM.java:810)
    at hudson.plugins.git.GitSCM.retrieveChanges(GitSCM.java:1066)
    at hudson.plugins.git.GitSCM.checkout(GitSCM.java:1097)
    at hudson.scm.SCM.checkout(SCM.java:485)
    at hudson.model.AbstractProject.checkout(AbstractProject.java:1269)
    at hudson.model.AbstractBuild$AbstractBuildExecution.defaultCheckout(AbstractBuild.java:604)
    at jenkins.scm.SCMCheckoutStrategy.checkout(SCMCheckoutStrategy.java:86)
    at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:529)
    at hudson.model.Run.execute(Run.java:1741)
    at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:43)
    at hudson.model.ResourceController.execute(ResourceController.java:98)
    at hudson.model.Executor.run(Executor.java:410)
Caused by: hudson.plugins.git.GitException: Command "git -c core.askpass=true fetch --tags --progress file:///Users/eugenmartynov/Development/source/company/app-android/.git +refs/heads/*:refs/remotes/origin/*" returned status code 141:
stdout: 
stderr: 
    at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.launchCommandIn(CliGitAPIImpl.java:1719)
    at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.launchCommandWithCredentials(CliGitAPIImpl.java:1463)
    at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.access$300(CliGitAPIImpl.java:63)
    at org.jenkinsci.plugins.gitclient.CliGitAPIImpl$1.execute(CliGitAPIImpl.java:314)
    at hudson.plugins.git.GitSCM.fetchFrom(GitSCM.java:808)
    ... 11 more
ERROR: null

【问题讨论】:

  • 如果你尝试git remote set-url origin file:///Users/....然后再尝试fetch,结果是一样的吗?
  • 听起来您经常更改原始网址...有什么理由不添加另一个遥控器?
  • 我对本地 jenkins 有疑问。使用命令我试图报告 jenkins git 插件在做什么
  • 同样的结果是我尝试git remote set-url ...
  • 终端有输出吗?

标签: git jenkins


【解决方案1】:

我猜你使用了错误的网址。对于本地路径,您只需使用该路径。您的 url 看起来像一个 UNC 路径,即 Users 是主机名,其余的是共享目录。因此,它会尝试解析可能需要一些时间的主机名。

您的 url 缺少磁盘名称。我猜是 Windows。

所以,你可以只提供完整路径,我猜是git remote set-url origin c:/Users/eugenmartynov/Development/source/company/app-android。或者,如果我是对的,您可以添加更多斜线:file://///c:/...

顺便说一句,git fetch 可以接受 URL,无需添加遥控器。

【讨论】:

  • 两个 cmets,1) 我在 Mac 机器上,2) 它以前工作过,有什么变化?
  • @EugenMartynov 嗯,很奇怪...然后尝试使用路径:git fetch /Users/eugenmartynov/Development/source/company/app-android/.git ...。 Jenkins 是否以同一用户身份运行?它真的可以访问主目录吗?
  • 它以同一用户身份运行。 git fetch 也挂了
  • @EugenMartynov 这可能是安装损坏。例如。 stackoverflow.com/questions/12613315/…尝试下载新鲜的git分发版直接使用。
  • 这也不是个案。我要结束问题了,因为我将本地 jenkins 指向远程 git,所以没有更多时间花在上面
猜你喜欢
  • 1970-01-01
  • 2010-10-19
  • 2013-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-28
  • 2018-01-31
  • 2013-09-04
相关资源
最近更新 更多