2016-10-07 4 views
2

Я использую git show, чтобы получить содержимое файла по конкретной ревизии elasticsearch, которая размещена в Github. Это моя команда мерзавец, который я бегу в корневом каталоге проекта:git show в отдельном файле return 'fatal: bad object'

git show 63cbc8439357f496ce630c2eb35b2cf02342fa4b~1:rest-spec 

Однако, я получил следующее сообщение об ошибке:

fatal: bad object 63cbc8439357f496ce630c2eb35b2cf02342fa4b~1:rest-spec 

остальное спекуляция является существовавшего в версии 63cbc8439357f496ce630c2eb35b2cf02342fa4b ~ 1, поскольку он изменен в следующей редакции. Вы можете увидеть изменение следующего пересмотра here в Github, и я проверил это с моим местным клоном с помощью следующей команды:

git show 63cbc8439357f496ce630c2eb35b2cf02342fa4b 

Это выход выше мерзавца шоу (я просто включить изменение покоя спецификации):

diff --git a/rest-spec b/rest-spec 
deleted file mode 160000 
index b3ab724..0000000 
--- a/rest-spec 
+++ /dev/null 
@@ -1 +0,0 @@ 
-Subproject commit b3ab72486fae1b5c5a5397356a3e113bf72eb6d5 

Высоко ценим вашу помощь!

ответ

2

Это потому, что rest-spec является подмодулем репозитория elasticsearch и, таким образом, не является объектом, принадлежащим (непосредственно хранящемуся) в этом репозитории. Посмотрите на tree of the 63cbc8439357f496ce630c2eb35b2cf02342fa4b~1 revision, чтобы убедиться, что rest-spec отличается от других предметов. Он записывается в репозиторий elasticsearch через файл .gitmodules, а содержимое ссылочного репозитория elasticsearch-rest-api-spec предоставляется в виде подкаталога в рабочем дереве суперпроекта (т. Е. В репозитории elasticsearch) с помощью команд git submodule. Для получения дополнительной информации см. Submodules chapter in the Git Book и documentation of the git submodule command.

+0

Благодарим вас за ответ. Я использовал 'diff --ignore-submodules' для фильтрации подмодуля, и он не появился в результате. Как мы можем найти файл подмодуля? Как мы можем видеть содержимое файла подмодуля? –

+0

Я столкнулся с другой ошибкой. Я был бы признателен, если бы вы могли помочь мне решить эту проблему @Leon. В commit ** e7e1667a26de5472e3419c586682b92c37c6e7d3 **, 'diff --ignore-subodules' доза не фильтрует субмодуль, а ** rest-spec ** появляется в' git diff'. Вы знаете, как я могу фильтровать подмодуль ** в 'git diff'? Спасибо –

+0

@MohsenLaali Мой источник информации является официальной документацией. Это предполагает, что 'git diff --ignore-submodules = all' должен игнорировать все изменения в подмодулях, но также указывает, что' git diff --ignore-subodules' (без явно заданного режима) по умолчанию имеет '--ignore-subodules = all'. Однако случай с фиксацией ** e7e1667a26de5472e3419c586682b92c37c6e7d3 ** заключается в том, что ** rest-spec ** в том, что commit не является подмодулем, а фактическим объектом репозитория (символической ссылки типа). Вот почему он появляется в разнице. – Leon