Ссылка на sha1 в одном локальном репо из другого локального репо в git - PullRequest
1 голос
/ 20 августа 2011

У меня есть два репозитория git, которые я клонировал на своей локальной машине. Я пытаюсь применить изменение одного репо к другому:

cd path/to/local-repo1
git fetch path/to/local-repo2 <sha1>
// cherry-pick from fetch head, etc.

Я получаю:

fatal: Couldn't find remote ref <sha1>
fatal: The remote end hung up unexpectedly

Я обнаружил git: применить изменения, внесенные коммитом в одном репо к другому репо , но почему git не распознает sha1 в другом локальном репо? Оказывается, что если я заменю sha1 на имя ветви, это удастся, но мне нужно сделать это с множеством sha1, и я не хочу создавать ветку на каждом из них, чтобы ссылаться на них.

1 Ответ

1 голос
/ 20 августа 2011

Форма git fetch, которую вы пытаетесь использовать:

git fetch <repository> <refspec>

Тем не менее, ваша SHA1sum является (маловероятно!) Действительной ссылкой. Refspec определяет отображение между ссылками (обычно именами ветвей) между исходным и целевым хранилищем. Суммы SHA1 (имена объектов) отличаются от ссылок, и ошибка говорит вам, что когда вы делаете git fetch path/to/local-repo2 f414f31, он расширяет refspec до f414f31:f414f31, а затем не может найти ref f414f31 в удаленном репозитории. Это потому, что это не ссылка.

Итак, предполагая, что ваш коммит находится в локальной ветке в удаленном репозитории, я бы сделал следующее:

git remote add other-local path/to/local-repo2
git fetch other-local
git cherry-pick f414f31

Форма git fetch <remote-name> извлекает все локальные ветки в удаленном репозитории в ветки удаленного отслеживания под refs/remotes/<remote-name> и проверяет, что все объекты, необходимые для этих ветвей (включая все коммиты в истории), присутствуют в ваш локальный репозиторий.

...