Cygwin и Git: получение "роковой: ошибка в строке 1:" - PullRequest
4 голосов
/ 06 марта 2012

Я использую последнюю версию Git, доступную для последней версии Cygwin. Примерно в половине случаев при извлечении из какого-либо пульта появляется следующая ошибка:

неустранимо: ошибка в строке 1:

Полная трассировка дает следующее:

$ GIT_TRACE=2 git pull -v upstream master
trace: exec: 'git-pull' '-v' 'upstream' 'master'
trace: run_command: 'git-pull' '-v' 'upstream' 'master'
trace: built-in: git 'rev-parse' '--git-dir'
trace: built-in: git 'rev-parse' '--is-bare-repository'
trace: built-in: git 'rev-parse' '--show-toplevel'
trace: built-in: git 'ls-files' '-u'
trace: built-in: git 'symbolic-ref' '-q' 'HEAD'
trace: built-in: git 'config' '--bool' 'branch.master.rebase'
trace: built-in: git 'config' '--bool' 'pull.rebase'
trace: built-in: git 'rev-parse' '-q' '--verify' 'HEAD'
trace: built-in: git 'fetch' '-v' '--update-head-ok' 'upstream' 'master'
trace: run_command: 'ssh' 'git@redacted.com' 'git-upload-pack '\''Project/project.git'\'''
trace: run_command: 'rev-list' '--verify-objects' '--stdin' '--not' '--all' '--quiet'
trace: run_command: 'rev-list' '--verify-objects' '--stdin' '--not' '--all'
trace: exec: 'git' 'rev-list' '--verify-objects' '--stdin' '--not' '--all'
trace: built-in: git 'rev-list' '--verify-objects' '--stdin' '--not' '--all'
From redacted.com:Project/project
 * branch            master     -> FETCH_HEAD
trace: built-in: git 'rev-parse' '-q' '--verify' 'HEAD'
trace: built-in: git 'fmt-merge-msg'
fatal: Error in line 1:

Кто-нибудь сталкивался с этой проблемой? И если да, то как ты это исправил?

1 Ответ

1 голос
/ 24 апреля 2012

Я также наблюдал эту проблему на Cygwin 1.7.9 на Windows 7. Каким-то образом .git/FETCH_HEAD становится поврежденным.Это происходит с удаленными устройствами, которые выбираются через SSH, а также на том же хосте.

В качестве обходного пути рассмотрим выдержку из git pull документации :

В режиме по умолчанию git pull является сокращением для git fetch, за которым следует git merge FETCH_HEAD.

Чтобы избежать необходимости читать FETCH_HEAD, назовите свою ветвь явно.Например, если вы находитесь на master и отслеживаете origin/master, выполните следующую последовательность, чтобы получить тот же эффект, что и git pull.

$ git fetch
$ git merge origin/master

Я думал, что эта проблема была спорадической,но в последнее время у меня возникают проблемы, чтобы добиться успеха вообще.

#! /usr/bin/env perl

use strict;
use warnings;

sub usage {
  <<EOUsage;
Usage: $0 [how-many]

  where how-many is a positive integer (default: 100)
EOUsage
}

$0 =~ s!^.*/!!;
my $howmany = @ARGV ? shift : 100;
die usage if @ARGV || $howmany !~ /^ (?!0+$) \d+$/x;

my $bad;
for (1 .. $howmany) {
  unlink ".git/FETCH_HEAD";
  my $output = `git fetch -v 2>&1`;
  die "$0: git fetch exited ", ($? >> 8), ":\n", $output if $?;

  ++$bad unless system("git rev-parse -q --verify FETCH_HEAD") == 0;
}

my $pct = sprintf "%d%%", ($bad/$howmany) * 100;
print "$0: fetches=$howmany, bad=$bad ($pct)\n";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...