Git获取卡住了

4

我有一个git代码库的工作副本(不是裸仓库)。我还设置了本地的Jenkins,并且我的任务指向这个代码库。一切都运行良好。我认为昨天我更新了Jenkins,今天早上我发现我的任务开始失败了。因为它们无法从我的代码库中获取源代码(会超时)。

所以我开始调查。我决定在终端中重复git命令来检查能否报告问题。下面是我正在执行的操作:

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

它挂起了。我不知道还有什么需要检查。

我使用的是Git版本2.8.3。但这并不重要,因为我在使用Xcode工具中的默认版本时看到了相同的行为。

如果我尝试打开Git跟踪日志,我会看到以下内容:

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),结果是否相同? - 1615903
听起来你经常更改源URL... 你为什么不添加另一个远程呢? - g19fanatic
我遇到了本地Jenkins的问题。我正在尝试使用命令报告Jenkins Git插件正在做什么。 - Eugen Martynov
如果我尝试使用 git remote set-url ...,结果是相同的。 - Eugen Martynov
它会在终端输出任何内容吗? - kan
没有任何卡顿,我会尝试使用git记录一些日志。 - Eugen Martynov
1个回答

1
我猜你使用的是错误的URL。对于本地路径,你只需要使用路径即可。你的URL看起来像是一个UNC路径,即Users是主机名,其余是共享目录。因此,它尝试解析一个可能需要一些时间的主机名。
你的URL缺少磁盘名称。我猜它是Windows。
所以,你可以提供完整的路径,我猜git remote set-url origin c:/Users/eugenmartynov/Development/source/company/app-android就可以了。或者如果我是正确的话,你可以添加更多的斜杠:file://///c:/...
顺便说一下,git fetch可以接受URL,不必添加远程。

两个注释,1)我正在使用Mac电脑,2)之前它是可以工作的,发生了什么改变? - Eugen Martynov
@EugenMartynov 嗯,奇怪...试着只使用路径:git fetch /Users/eugenmartynov/Development/source/company/app-android/.git ...。Jenkins是否以相同的用户运行?它实际上是否有访问主目录的权限? - kan
它以相同用户身份运行。git fetch也停顿了。 - Eugen Martynov
@EugenMartynov 可能是由于不完整的安装引起的。例如,https://dev59.com/fWjWa4cB1Zd3GeqPvOrP 尝试下载最新的git分发并直接使用它。 - kan
这也不是问题。我将关闭这些问题,因为我把我的本地 Jenkins 指向了远程的 Git,没有更多时间花在上面了。 - Eugen Martynov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接